În MVVMcross, legarea unică și legarea unidirecțională sunt două moduri distincte de legare a datelor care servesc scopuri diferite.
legarea unică
O singură dată legarea transferă datele de la ViewModel la vizualizare o singură dată, când sursa de legare este setată inițial. După acest transfer inițial, legarea nu monitorizează modificările din ViewModel și nu actualizează vizualizarea decât dacă sursa de legare în sine este resetată. Acest mod este util pentru câmpurile care pot fi configurabile, dar nu se schimbă frecvent după ce sunt setate. De exemplu, în MVVMcross, legarea o singură dată este utilizată pentru setarea textului static din fișiere lingvistice, deoarece este obișnuit ca utilizatorii să selecteze o limbă o dată și să nu-l schimbe frecvent după aceea [1].
legarea unidirecțională
Pe de altă parte, legarea unidirecțională actualizează continuu vizualizarea ori de câte ori proprietatea corespunzătoare din ViewModel se modifică. Aceasta înseamnă că orice modificare a proprietății ViewModel se va reflecta automat în vizualizare. Cu toate acestea, modificările aduse direct la vedere nu afectează ViewModel. Legarea unidirecțională este utilă atunci când se afișează date care provin dintr-o sursă dinamică, cum ar fi datele senzorului sau fluxurile de rețea, unde vizualizarea ar trebui să reflecte cea mai recentă stare a ViewModel, dar nu este nevoie să trimită actualizări înapoi la ea [1].
Diferențe cheie
-Actualizare Frecvență: O singură dată legarea actualizează vizualizarea o singură dată la configurare, în timp ce legarea unidirecțională actualizează continuu vizualizarea ori de câte ori se modifică ViewModel.
-Monitorizarea modificărilor: Legarea o singură dată nu monitorizează modificările în vizualizarea modelului după configurarea inițială, în timp ce legarea unidirecțională ascultă activ modificările din ViewModel.
-Cazuri de utilizare: O singură dată este ideală pentru datele statice sau rar în schimbare, în timp ce un singur sens este mai potrivit pentru datele dinamice care trebuie afișate în timp real, fără interacțiunea utilizatorului care afectează ViewModel.
În rezumat, în timp ce ambele moduri transferă datele de la ViewModel în vedere, legarea unică o face o singură dată și nu monitorizează modificările, în timp ce legarea unidirecțională actualizează continuu vizualizarea pe baza modificărilor ViewModel.
Citări:[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-binding-mode-used-in-a-a-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-your-first-xamarin-app/creating-the-android-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-one-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_binding_better_than_twoway/