MVVMCross中的一次性结合是一种有用的绑定模式,它仅在设置绑定源时仅将值从视图模型传输到视图一次。它不会主动监视ViewModel中的更改,这意味着如果在初始绑定后,如果ViewModel的属性更改,则不会更新视图。以下是使用一次性约束的一些局限性和考虑因素:
1。没有连续的更新:一次性绑定的主要限制是,它不会基于ViewModel的更改不断更新视图。这使得它不太适合需要在UI上实时反映的动态数据。
2。静态数据:一次性绑定最好用于不经常变化的静态或读取数据。例如,它通常用于从语言文件中设置静态文本,因为语言选择通常是一次并且不经常更改[1]。
3。回收科和类似控件:在诸如`mvxrecyclerview'之类的控件中,一次性绑定可能不会像查看回收合理所致的预期。当用户浏览列表时,视图将被回收和重复使用,这可能会导致一次性绑定重新射击,从而有效地行为像连续绑定一样[4]。如果无法正确管理,这可能导致意外行为。
4。绩效注意事项:虽然一次性绑定不会监控更改,但它们并未固有地引入性能问题。但是,如果在复杂的布局或许多绑定中广泛使用,与其他结合模式相比,初始设置可能会导致UI渲染时间较慢[9]。
5。线程安全:MVVMCROSS绑定,包括一次性绑定,如果无法正确管理,则可能会受到线程问题的影响。例如,如果在工作线程上执行绑定,则除非与UI线程正确同步[5] [3],否则可能会导致意外行为。
总而言之,虽然一次性绑定对于静态数据很有用,但对于需要连续更新的动态数据或方案,它并不理想。此外,其在某些UI组件(例如“ RecyClerview”)中的行为需要仔细处理以避免意外重新启动。
引用:[1] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[2] https://stackoverflow.com/questions/25460030/when-to-use-muse-mvvmcross-data束缚
[3] https://github.com/mvvmcross/mvvmcross/issues/1545
[4] https://stackoverflow.com/questions/48910503/binding-mode-onetime-intime-intime-in-intime-in-mvxrecyclerview
[5] https://www.mvvmcross.com/mvvmcross-4.2/
[6] https://github.com/mvvmcross/mvvmcross/issues/29
[7] https://stackoverflow.com/questions/17156368/
[8] https://learn.microsoft.com/en-us/dotnet/maui/fundamentals/data-binding/binding-mode?view=net-maui-9.0
[9] https://github.com/mvvmcross/mvvmcross/issues/1342
[10] https://www.mvvmcross.com/mvvmcross-5-release/