I MVVMCross är engångsbindning och envägsbindning två distinkta databindningslägen som tjänar olika syften.
Engångsbindning
Engångsbindande överför data från ViewModel till vyn endast en gång, när bindningskällan initialt är inställd. Efter denna första överföring övervakar bindningen inte förändringar i ViewModel 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 de är inställda. Till exempel, i MVVMCross, används engångsbindning för att ställa in statisk text från språkfiler, eftersom det är vanligt att användare väljer ett språk en gång och inte ändrar det ofta därefter [1].
Envägsbindning
Envägsbindning uppdaterar å andra sidan kontinuerligt vyn när motsvarande egenskap i ViewModel ändras. Detta innebär att eventuella ändringar av ViewModels egenskap automatiskt återspeglas i vyn. Ändringar som gjorts direkt till vyn påverkar emellertid inte ViewModel. Envägsbindning är användbar när man visar data som kommer från en dynamisk källa, såsom sensordata eller nätverksfoder, där vyn ska återspegla det senaste tillståndet i ViewModel men inte behöver skicka uppdateringar tillbaka till den [1].
Nyckelskillnader
-Uppdatera frekvens: Engångsbindning uppdaterar vyn bara en gång vid installationen, medan envägsbindning kontinuerligt uppdaterar vyn när vymodellen ändras.
-Ändra övervakning: Engångsbindning övervakar inte förändringar i ViewModel efter den första installationen, medan envägsbindning aktivt lyssnar på förändringar i ViewModel.
-Användningsfall: Engång är idealisk för statisk eller sällan ändra data, medan enväg är bättre lämpad för dynamiska data som måste visas i realtid utan att användarinteraktion påverkar Viewmodel.
Sammanfattningsvis, medan båda lägena överför data från ViewModel till vyn, gör engångsbindning det bara en gång och inte övervakar för förändringar, medan envägsbindning kontinuerligt uppdaterar vyn baserad på synmodellförändringar.
Citeringar:[1] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[2] https://blog.ostebaronen.dk/2018/01/mvvmcross-binding-target.html
]
[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
]
[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
]
[11] https://www.reddit.com/r/javascript/comments/v993r4/askjs_why_is_oneway_binding_better_than_twoway/