V MVVMCross sú jednorazová väzba a jednosmerná väzba dva odlišné režimy väzby na dáta, ktoré slúžia rôznym účelom.
jednorazová väzba
Jednorazové väzobné prenáša údaje z pohľadu ViewModel do pohľadu iba raz, keď je viazaný zdroj pôvodne nastavený. Po tomto počiatočnom prenose väzba nesleduje zmeny v programe ViewModel a neaktualizuje zobrazenie, pokiaľ sa samotný zdroj viazania resetuje. Tento režim je užitočný pre polia, ktoré sú konfigurovateľné, ale po nastavení sa často nemenia. Napríklad v MVVMCross sa jednorazová väzba používa na nastavenie statického textu z jazykových súborov, pretože je bežné, že používatelia vyberajú jazyk raz a potom ho často nezmenia [1].
jednosmerná väzba
Na druhej strane jednosmerná väzba nepretržite aktualizuje zobrazenie vždy, keď zodpovedajúca vlastnosť v zobrazení ViewModel zmení. To znamená, že akékoľvek zmeny vlastnosti ViewModel sa automaticky odrážajú v pohľade. Zmeny vykonané priamo na pohľad však neovplyvňujú ViewModel. Jednosmerná väzba je užitočná pri zobrazovaní údajov, ktoré pochádzajú z dynamického zdroja, ako sú údaje senzorov alebo sieťové informačné kanály, kde by pohľad mal odrážať najnovší stav ViewModel, ale nemusí k nemu odosielať aktualizácie [1].
Kľúčové rozdiely
-Aktualizácia frekvencie: Jednorazové viazanie aktualizuje zobrazenie iba raz pri nastavení, zatiaľ čo jednosmerná väzba nepretržite aktualizuje zobrazenie vždy, keď sa zmení ViewModel.
-Zmena monitorovania: Jednorazová väzba nesleduje zmeny v programe ViewModel po počiatočnom nastavení, zatiaľ čo jednosmerná väzba aktívne počúva zmeny v zobrazení.
-Prípady použitia: Jednoraz je ideálny pre statické alebo zriedkavo meniace sa dáta, zatiaľ čo jednosmerne je vhodnejší pre dynamické údaje, ktoré je potrebné zobraziť v reálnom čase bez interakcie používateľov ovplyvňujúceho ViewModel.
Stručne povedané, zatiaľ čo oba režimy prenášajú údaje z pohľadu ViewModel do pohľadu, jednorazová väzba tak robí iba raz a nesleduje zmeny, zatiaľ čo jednosmerná väzba nepretržite aktualizuje pohľad na základe zmien ViewModel.
Citácie:[1] https://www.mvvmcross.com/documentation/funmamentals/data-binding
[2] https://blog.ostebaronen.dk/2018/01/mvvmcross-binding-target.html
[3] https://stackoverflow.com/questions/41768962/mvvmcross-default-binding-mode-used-used-in-aproject
[4] https://www.mvvmcross.com/documentation/funmamentals/viewmodel-lifecycle
[5] https://learn.microsoft.com/en-us/dotnet/maui/funmamentals/data-binding/binding-mode?view=net-maui-9.0
Https://yanxiaodi.gitbook..io/xamarin-mvvmcross-wandbook/using-mvvmcross-to-create-your-your-first-xamarin-App/creating-the-android-project/understand-the-data-binding-intax
[7] https://www.mvvmcross.com/documentation/advanced/custom-data-binding
[8] https://github.com/mvvmcross/mvvmcross/issues/29
[9] https://stackoverflow.com/questions/27803448/data-binding-one-vs-two-way
[10] https://stackoverflow.com/questions/48910503/binding-mode-netime-in-mvxrecycleview
[11] https://www.reddit.com/r/javascript/comments/v993r4/askjs_why_is_oneway_binding_better_than_twoway/