Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Hogyan kezeli az mvvmcross a frissítéseket az egyszeri kötés használatakor


Hogyan kezeli az mvvmcross a frissítéseket az egyszeri kötés használatakor


Az MVVMCross az egyszeri kötés használatakor kezeli a frissítéseket, ha az adatokat a ViewModelből csak egyszer továbbítja a nézetbe, amikor a kötési forrás kezdetben be van állítva. A kezdeti átvitel után a kötés nem aktívan figyeli az üzenetek vagy események megváltoztatását a ViewModelből. Ezért a ViewModel tulajdonságának későbbi változásai nem tükröződnek a nézetben, kivéve, ha maga a kötési forrást visszaállítják vagy újraindítják.

Az egyszeri kötés kulcspontjai az MVVMCross-ban:

1. Kezdeti adatátvitel: A kötés az adatokat a ViewModel -ből a nézetre, amikor a kötés először megállapodik. Ez általában hasznos olyan mezők számára, amelyek konfigurálhatók, de nem változnak gyakran a beállításuk után.

2. Nincs folyamatos megfigyelés: A kétirányú vagy egyirányú kötésekkel ellentétben az egyszeri kötések nem folyamatosan figyelik a ViewModel-t a változásokhoz. Ez azt jelenti, hogy ha a ViewModel tulajdonsága megváltozik a kezdeti kötés után, akkor a nézet nem frissül automatikusan.

3. Használati esetek: Az egyszeri kötést általában használják olyan forgatókönyvekben, ahol az adatok statikus vagy ritkán változnak, például a statikus szöveg beállítása a nyelvi fájlokból. Miután egy nyelvet kiválasztott, ritka, hogy a felhasználó gyakran megváltoztatja azt, így az ilyen esetekre egyszeri kötés alkalmas [1].

4. A kötési forrás visszaállítása: Ha a kötési forrást visszaállítják vagy újraindítják, akkor az egyszeri kötés az új adatokat a ViewModelből ismét a nézetbe továbbítja. Ehhez azonban a kötési forrás visszaállításához explicit művelet szükséges.

5. Korlátozások a dinamikus nézetekben: A dinamikus nézetekben, például az „MVXRECYCLERVIEW” -et használók, az egyszeri kötések nem viselkedhetnek a várt módon, ha a nézeteket újrahasznosítják. Ilyen esetekben a kötés újraértékelhető, amikor a nézeteket újra felhasználják, ami váratlan viselkedéshez vezethet [6].

Összefoglalva: az MVVMCross egyszeri kötődését olyan forgatókönyvekre tervezték, ahol az adatok egyszer vannak beállítva, és nem kell dinamikusan frissíteni. Ez egyszerűsíti a kötési infrastruktúrát azáltal, hogy elkerüli a ViewModel folyamatos megfigyelését a változásokhoz, de a nézet frissítéséhez kézi beavatkozást igényel, ha a ViewModel adatai a kezdeti kötés után megváltoznak.

Idézetek:
[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-ovates-to-bound-property-in-view-not-propaging-to-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-asynchronous-papplications-data-data-data-data-data-skeveral
[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-andsetup