MVVMCROSS使用一次性绑定时,通过将数据从视图模型传输到视图时,最初设置了一次。初始传输后,绑定不会从ViewModel积极监视更改消息或事件。因此,除非绑定源本身已重置或重新定位,否则对ViewModel属性的任何后续更改都不会反映在视图中。
MVVMCross中一次性绑定的要点:
1。初始数据传输:绑定将数据从视图模型转移到视图时,首先建立了绑定。这通常对于可配置但设置后不经常更改的字段很有用。
2。无连续监视:与双向或单向绑定不同,一次性绑定不会连续监视ViewModel以进行更改。这意味着,如果ViewModel的属性在初始绑定后发生了变化,则视图将不会自动更新。
3.用例:在数据是静态或很少更改的情况下,通常使用一次性绑定,例如从语言文件设置静态文本。选择语言后,用户经常更改它并不常见,使一次性绑定适用于此类情况[1]。
4。重置绑定源:如果重置绑定源或重新定位,则一次性绑定将再次将新数据从视图模型转移到视图。但是,这需要明确的操作以重置绑定源。
5。动态视图中的局限性:在动态视图中,例如使用“ MvxrecyClerview”的视图,如果回收视图,则一次性绑定可能不会像预期的那样行为。在这种情况下,可以重复使用视图,可以重新评估结合,这可能导致意外行为[6]。
总而言之,MVVMCross的一次性绑定设计用于设置数据一次并且不需要动态更新的方案。它通过避免对ViewModel进行更改的持续监视来简化绑定基础架构,但是需要手动干预以更新视图,如果ViewModel的数据在初始绑定后是否更改。
引用:[1] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[2] https://www.mvvmcross.com/documentation/fundamentals/depentency-indoction
[3] https://learn.microsoft.com/en-us/dotnet/maui/xaml/fundamentals/mvvm?view=net-maui-9.0
[4] https://stackoverflow.com/questions/46558177/46558177/mvvmcross-updates-to-bound-property-in-bound-roperty-in-view-not-not-propagating-to-property-to-property-in-in-viewm
[5] https://blog.ostebaronen.dk/2018/01/mvvmcross-binding-target.html
[6] https://stackoverflow.com/questions/48910503/binding-mode-onetime-intime-intime-in-mvxrecyclerview
[7] https://github.com/mvvmcross/mvvmcross/issues/87
[8] https://learn.microsoft.com/en-us/archive/mmsdn-magazine/2014/march/async-programming-patrogramming-patterns-for-asynchronous-mvvm-applications-data-data-cinding
[9] https://learn.microsoft.com/en-us/dotnet/maui/fundamentals/data-binding/binding-mode?view=net-maui-9.0
[10] https://www.reddit.com/r/dotnetmaui/comments/103ai8p/mvvm_problems_having_troubles_with_data_bindings/
[11] https://www.mvvmcross.com/documentation/advanced/customizing-usion-app-anp-setup