Az MVVMCross-ban az egyszeri kötés és az egyirányú kötés két különálló adatkötési mód, amelyek különböző célokat szolgálnak.
egyszeri kötés
Az egyszeri kötés az adatokat a ViewModel-ből csak egyszer, amikor a kötési forrás kezdetben be van állítva. A kezdeti átvitel után a kötés nem figyeli a ViewModel változásait, és csak akkor frissíti a nézetet, ha maga a kötési forrás visszaállítja. Ez az üzemmód hasznos olyan mezők számára, amelyek konfigurálhatók, de nem változnak gyakran a beállításuk után. Például az MVVMCross-ban az egyszeri kötést a statikus szöveg nyelvi fájlokból történő beállításához használják, mivel a felhasználók számára gyakori, hogy egy nyelvet egyszer válasszanak, és nem változtatják meg gyakran [1].
Egyirányú kötés
Az egyirányú kötés viszont folyamatosan frissíti a nézetet, amikor a ViewModel megfelelő tulajdonsága megváltozik. Ez azt jelenti, hogy a ViewModel tulajdonságának bármilyen változása automatikusan tükröződik a nézetben. A közvetlenül a nézetben végrehajtott változások azonban nem befolyásolják a ViewModel -t. Az egyirányú kötés akkor hasznos, ha olyan dinamikus forrásból származó adatok megjelenítésére, például érzékelőadatokból vagy hálózati hírcsatornákból származnak, ahol a nézetnek tükröznie kell a ViewModel legújabb állapotát, de nem kell frissítéseket küldenie vissza [1].
kulcsfontosságú különbségek
-Frissítés Frekvencia: Az egyszeri kötés csak egyszer frissíti a nézetet a beállításkor, míg az egyirányú kötés folyamatosan frissíti a nézetet, amikor a ViewModel megváltozik.
-Változtassa meg a megfigyelést: Az egyszeri kötés nem figyeli a ViewModel változásait a kezdeti beállítás után, míg az egyirányú kötés aktívan hallgatja a ViewModel változásait.
-Használati esetek: Az egyszeri ideális az adatok statikus vagy ritkán megváltoztatásához, míg az egyirányúan jobban megfelelnek a dinamikus adatokhoz, amelyeket valós időben kell megjeleníteni anélkül, hogy a felhasználói interakció a ViewModel-t befolyásolja.
Összefoglalva: míg mindkét mód az adatokat továbbítja a ViewModel-ből a nézetbe, az egyszeri kötés csak egyszer teszi meg, és nem figyeli a változásokat, míg az egyirányú kötés folyamatosan frissíti a nézetet a ViewModel változások alapján.
Idézetek:[1] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[2] https://blog.ostebaronen.dk/2018/01/mvvmcross-binding-target.html
[3] https://stackoverflow.com/questions/41768962/mvvmcross-default-kind-mode-used-----project
[4] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[5] https://learn.microsoft.com/en-us/dotnet/maui/fundamentals/data-binding/binding-mode?view=net-maui-9.0
[6] https://yanxiaodi.gitbook.io/xamarin-mvvmcross-handbook/using-mvvmcross-to-create-cree-first-xamarin-app/creating-t--droid-project/understanding-the-data-binding-syntax
[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-on-vs-two-way
[10] https://stackoverflow.com/questions/48910503/binding-mode-onetime-in-mvxrecyclerview
[11] https://www.reddit.com/r/javascript/comments/v993r4/askjs_why_is_oneway_binder_better_than_twoway/