MVVMCross zpracovává aktualizace při použití jednorázového vazby přenosem dat z ViewModel do pohledu pouze jednou, když je zdroj vazeb původně nastaven. Po tomto počátečním přenosu vazba aktivně monitoruje změny zpráv nebo událostí z ViewModel. Proto se žádné následné změny ve vlastnictví ViewModelu v pohledu nerozhodly, pokud není samotný zdroj vazebného zdroje resetován nebo znovu inicializován.
Klíčové body jednorázové vazby v mvvmcross:
1. Počáteční přenos dat: Vazebné převody přenáší data z viewModelu do pohledu, když je vazba poprvé stanovena. To je obvykle užitečné pro pole, která jsou konfigurovatelná, ale po nastavení se často nemění.
2. Žádné nepřetržité monitorování: Na rozdíl od obousměrných nebo jednosměrných vazeb, jednorázové vazby nepřetržitě monitorují změny ViewModel. To znamená, že pokud se vlastnost ViewModel změní po počáteční vazbě, zobrazení nebude automaticky aktualizováno.
3. Případy použití: Jednorázová vazba se běžně používá ve scénářích, kde jsou data statická nebo jen zřídka mění, jako je nastavení statického textu z jazykových souborů. Jakmile je jazyk vybrán, je neobvyklé, že jej uživatel často mění, takže jednorázová vazba je vhodná pro takové případy [1].
4. Resetování zdroje vazby: Pokud je zdroj vazeb resetován nebo resetován, jednorázová vazba přeneste nová data z ViewModelu znovu do pohledu. To však vyžaduje explicitní akce k resetování zdroje vazby.
5. Omezení v dynamických pohledech: V dynamických pohledech, jako jsou ty, které používají „mvxRecyclerView“, se jednorázové vazby nemusí chovat podle očekávání, pokud jsou pohledy recyklovány. V takových případech může být vazba přehodnocena, protože názory jsou znovu použity, což může vést k neočekávanému chování [6].
Stručně řečeno, jednorázová vazba MVVMCrossu je navržena pro scénáře, kde jsou data nastavena jednou a nemusí být dynamicky aktualizována. Zjednodušuje vazebnou infrastrukturu tím, že se zabrání nepřetržitému sledování ViewModel pro změny, ale vyžaduje manuální zásah k aktualizaci pohledu, pokud se data ViewModel změní po počáteční vazbě.
Citace:[1] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[2] https://www.mvvmcross.com/documentation/fundamentals/dependency-injection
[3] https://learn.microsoft.com/en-us/dotnet/maui/xaml/fundamentals/mvvm?view=net-maui-9.0
[4] https://stackoverflow.com/questions/46558177/mvvmcross-opdates-to-bound-property-in-view-not-property-in-viewm
[5] https://blog.ostebaronen.dk/2018/01/mvvmcross-binding-target.html
[6] https://stackoverflow.com/questions/48910503/binding-mode-onetime-in-mvxRecyclerView
[7] https://github.com/mvvmcross/mvvmcross/issues/87
[8] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/march/async-programming-patterns-for-synchrons-mvvm-application-data-binding
[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-using-app-and-setup