În MVVMcross, legarea unică și legarea în două sensuri servesc scopuri distincte în gestionarea interacțiunii dintre vedere și vizualizare.
legarea unică
Legarea o singură dată este utilizată pentru a transfera datele de la ViewModel la vizualizare o singură dată, când este setată sursa de legare. După acest transfer inițial, legarea nu monitorizează modificările la proprietățile 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 utilizatorul selectează de obicei o limbă o dată și rareori îl schimbă ulterior [1] [10].
legarea cu două sensuri
Legarea în două sensuri, pe de altă parte, stabilește o conexiune continuă, bidirecțională, între vedere și modă de vedere. Modificări fie în vizualizare, fie în actualizări de declanșare a ViewModel în celălalt. Acest mod este deosebit de util atunci când editați datele existente, cum ar fi completarea formularelor, în cazul în care atât intrarea utilizatorului, cât și orice modificare din ViewModel trebuie să fie reflectate în timp real. Legarea în două sensuri este utilizată în mod obișnuit în MVVMcross și servește adesea ca mod implicit pentru noile legături [1] [2].
Diferențe cheie
-Direcția fluxului de date: Legarea o singură dată actualizează doar vizualizarea de la ViewModel o dată, în timp ce legarea în două sensuri actualizează atât vizualizarea, cât și ViewModel continuu.
-Monitorizarea modificărilor: legarea unică nu monitorizează modificările după actualizarea inițială, în timp ce legarea în două sensuri monitorizează și actualizează continuu ambele capete.
-Cazuri de utilizare: O singură dată este ideală pentru datele statice sau rar în schimbare, în timp ce două căi sunt mai potrivite pentru forme interactive sau schimb de date dinamice.
În rezumat, legarea o singură dată este utilizată pentru configurarea datelor statice sau inițiale, în timp ce legarea în două sensuri este utilizată pentru scenarii interactive, în care atât vizualizarea, cât și vizualizarea trebuie să reflecte reciproc schimbările în timp real.
Citări:[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
]
[5] https://stackoverflow.com/questions/17156368/
[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://stackoverflow.com/questions/13504906/what-is-two-way-winding
[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://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_binding_better_than_twoway/