MVVMCross gestionează actualizări atunci când se utilizează o singură dată legarea prin transferul datelor de la ViewModel la vizualizare o singură dată, când sursa de legare este inițial setată. După acest transfer inițial, legarea nu monitorizează în mod activ schimbarea mesajelor sau evenimentelor din ViewModel. Prin urmare, orice modificări ulterioare ale proprietății ViewModel nu vor fi reflectate în vedere decât dacă sursa de legare în sine este resetată sau reinitializată.
Puncte cheie ale legării unice în MVVMCross:
1. Transferul inițial de date: legarea transferă datele de la ViewModel la vizualizare atunci când legarea este stabilită pentru prima dată. Acest lucru este de obicei util pentru câmpurile care pot fi configurabile, dar nu se schimbă frecvent după ce au fost setate.
2. Fără monitorizare continuă: Spre deosebire de legăturile cu două sensuri sau unidirecționale, legăturile unice nu monitorizează continuu ViewModel pentru modificări. Aceasta înseamnă că, dacă proprietatea ViewModel se schimbă după legarea inițială, vizualizarea nu va fi actualizată automat.
3. Cazuri de utilizare: Legarea unică este utilizată în mod obișnuit în scenarii în care datele sunt statice sau rareori modificări, cum ar fi setarea textului static din fișierele lingvistice. Odată ce o limbă este selectată, este neobișnuit ca utilizatorul să o schimbe frecvent, ceea ce face ca legarea să fie potrivită pentru astfel de cazuri [1].
4. Resetarea sursei de legare: Dacă sursa de legare este resetată sau reinitializată, legarea unică va transfera din nou noile date de la ViewModel în vedere. Totuși, acest lucru necesită o acțiune explicită pentru a reseta sursa de legare.
5. Limitări în vizualizări dinamice: în vizualizări dinamice, cum ar fi cele care folosesc `MVXRecyclerView`, legăturile unice pot să nu se comporte așa cum este de așteptat dacă vizualizările sunt reciclate. În astfel de cazuri, legarea poate fi reevaluată pe măsură ce opiniile sunt reutilizate, ceea ce poate duce la un comportament neașteptat [6].
În rezumat, legarea unică a MVVMCross este proiectată pentru scenarii în care datele sunt setate o dată și nu trebuie să fie actualizate dinamic. Simplifică infrastructura de legare, evitând monitorizarea continuă a ViewModel pentru modificări, dar necesită o intervenție manuală pentru a actualiza vizualizarea dacă datele ViewModel se modifică după legarea inițială.
Citări:[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
]
[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-mvvm-applications-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_troubbles_with_data_bindings/
[11] https://www.mvvmcross.com/documentation/advanced/customizing-using-app-and-setup