Az MVVMCROSS-ban az egyszeri kötés és a kétirányú kötés külön célokat szolgál a nézet és a nézet és a ViewModel közötti kölcsönhatás kezelésében.
egyszeri kötés
Az egyszeri kötést arra használják, hogy az adatokat a ViewModel-ből csak egyszer adják át a nézetbe, amikor a kötési forrás be van állítva. A kezdeti átvitel után a kötés csak a ViewModel tulajdonságainak változásait figyeli, é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őknél, amelyek konfigurálhatók, de a beállítás után nem változnak gyakran. 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ó általában egyszer választja ki a nyelvet, és utána ritkán változtatja meg [1] [10].
Kétirányú kötés
A kétirányú kötés viszont folyamatos, kétirányú kapcsolatot létesít a nézet és a nézetmodell között. Változások a nézetben vagy a ViewModel indító frissítésekben a másikban. Ez a mód különösen hasznos a meglévő adatok szerkesztésekor, például az űrlapok kitöltése, ahol mind a felhasználó bemenete, mind a ViewModel-ből való bármilyen változásnak valós időben kell tükröződni. A kétirányú kötést általában az MVVMCross-ban használják, és gyakran alapértelmezett módként szolgál az új kötésekhez [1] [2].
kulcsfontosságú különbségek
-Az adatáramlás iránya: Az egyszeri kötés csak egyszer frissíti a nézetet a ViewModelből, miközben a kétirányú kötés folyamatosan frissíti a nézetet és a nézetmodellt.
-A megfigyelés módosítása: Az egyszeri kötés nem figyeli a változásokat a kezdeti frissítés után, míg a kétirányú kötés folyamatosan figyeli és frissíti mindkét végét.
-Használati esetek: Az egyszeri ideális az adatok statikus vagy ritkán megváltoztatásához, míg a kétirány jobban megfelel az interaktív űrlapokhoz vagy a dinamikus adatcseréhez.
Összefoglalva: az egyszeri kötődést statikus vagy kezdeti adatbeállításhoz használják, míg a kétirányú kötést interaktív forgatókönyvekhez használják, ahol mind a nézetnek, mind a ViewModelnek tükröznie kell egymás valós idejű változásait.
Idézetek:[1] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[2] https://blog.ostebaronen.dk/2018/01/mvvmcross-binding-target.html
[3] https://www.mvvmcross.com/documentation/advanced/custom-data-binding
[4] https://softwareengineering.stackexchange.com/questions/322450/how-does-two-way-data-binder-differ-simple-auto-sync
[5] https://stackoverflow.com/questions/17156368/
[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://stackoverflow.com/questions/13504906/what-is-two-way-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://learn.microsoft.com/en-us/dotnet/maui/fundamentals/data-binding/binding-mode?view=net-maui-9.0
[12] https://www.reddit.com/r/javascript/comments/v993r4/askjs_why_is_oneway_binder_better_than_twoway/