I MVVMCross tjänar engångsbindning och tvåvägsbindning distinkta syften för att hantera interaktionen mellan vyn och synmodellen.
Engångsbindning
Engångsbindning används för att överföra data från ViewModel till vyn endast en gång när den bindande källan är inställd. Efter denna första överföring övervakar bindningen inte förändringar i ViewModels egenskaper och uppdaterar inte vyn om inte själva bindningskällan återställs. Detta läge är användbart för fält som är konfigurerbara men inte ändras ofta efter att ha ställts in. Till exempel, i MVVMCross, används engångsbindning för att ställa in statisk text från språkfiler, eftersom användaren vanligtvis väljer ett språk en gång och sällan ändrar det efteråt [1] [10].
Tvåvägsbindning
Tvåvägsbindning skapar å andra sidan en kontinuerlig, dubbelriktad koppling mellan vyn och synmodellen. Ändringar i antingen vyn eller ViewModel Trigger -uppdateringarna i den andra. Det här läget är särskilt användbart när du redigerar befintliga data, till exempel att fylla i formulär, där både användarens ingång och eventuella ändringar från ViewModel måste återspeglas i realtid. Tvåvägsbindning används ofta i MVVMCross och fungerar ofta som standardläge för nya bindningar [1] [2].
Nyckelskillnader
-Dataflödesriktning: Engångsbindning uppdaterar bara vyn från ViewModel en gång, medan tvåvägsbindande uppdaterar både vyn och ViewModel kontinuerligt.
-Ändra övervakning: Engångsbindning övervakar inte förändringar efter den första uppdateringen, medan tvåvägsbindning kontinuerligt övervakar och uppdaterar båda ändarna.
-Användningsfall: En gång är idealisk för statisk eller sällan ändra data, medan tvåvägs är bättre lämpade för interaktiva former eller dynamisk datautbyte.
Sammanfattningsvis används engångsbindning för statisk eller initial datainställning, medan tvåvägsbindning används för interaktiva scenarier där både vyn och ViewModel måste återspegla varandras förändringar i realtid.
Citeringar:[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/
]
[7] https://stackoverflow.com/questions/13504906/what-is-two-way-bindning
[8] https://github.com/mvvmcross/mvvmcross/issues/29
[9] https://stackoverflow.com/questions/27803448/data-binding-one-vs-two-way
]
[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/