In mvvmcross, il legame una tantum e il legame a due vie servono a scopi distinti nella gestione dell'interazione tra la vista e il punto di vista.
Binding una tantum
Il binding una tantum viene utilizzato per trasferire i dati dal ViewModel alla vista solo una volta, quando è impostata la sorgente di associazione. Dopo questo trasferimento iniziale, l'associazione non monitora le modifiche alle proprietà di ViewModel e non aggiorna la vista a meno che non venga ripristinato la fonte di associazione stessa. Questa modalità è utile per i campi configurabili ma non cambiano frequentemente dopo essere stati impostati. Ad esempio, in mvvmcross, l'associazione una tantum viene utilizzata per l'impostazione del testo statico dai file di lingua, poiché l'utente in genere seleziona una lingua una volta e raramente la cambia dopo [1] [10].
Binding bidirezionale
Il legame a due vie, d'altra parte, stabilisce una connessione costante e bidirezionale tra la vista e la ViewModel. Modifiche nella vista o negli aggiornamenti del trigger ViewModel nell'altro. Questa modalità è particolarmente utile quando si modificano i dati esistenti, come la compilazione dei moduli, in cui sia l'input dell'utente che le eventuali modifiche al ViewModel devono essere riflesse in tempo reale. Il legame a due vie è comunemente usato in mvvmcross e spesso funge da modalità predefinita per nuovi attacchi [1] [2].
differenze chiave
-Direzione del flusso di dati: una volta l'associazione aggiorna solo la vista da ViewModel una volta, mentre l'associazione a due vie aggiorna continuamente la vista e la ViewModel.
-Monitoraggio delle modifiche: l'associazione una tantum non monitora le modifiche dopo l'aggiornamento iniziale, mentre l'associazione a due vie monitora continuamente e aggiorna entrambe le estremità.
-Casi d'uso: una tantum è l'ideale per la modifica di dati statici o raramente, mentre a due vie è più adatto per forme interattive o scambio di dati dinamici.
In sintesi, l'associazione una tantum viene utilizzata per la configurazione di dati statica o iniziale, mentre l'associazione a due vie viene utilizzata per scenari interattivi in cui sia la vista che la vista devono riflettere le modifiche reciproche in tempo reale.
Citazioni:[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-wata-binding-fffer-from-simple-auto-sync
[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-blinding-sntentax
[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-twwo-way
[10] https://stackoverflow.com/questions/48910503/binding-mode-apetime-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/