MVVMCross hanterar uppdateringar när du använder engångsbindning genom att överföra data från ViewModel till vyn endast en gång, när den bindande källan ursprungligen är inställd. Efter denna första överföring övervakar bindningen inte aktivt ändringsmeddelanden eller händelser från ViewModel. Därför återspeglas alla efterföljande ändringar av ViewModels egenskap inte i vyn om inte själva bindningskällan återställs eller återinitialiseras.
Nyckelpunkter för engångsbindning i MVVMCross:
1. Inledande dataöverföring: Bindningen överför data från ViewModel till vyn när bindningen först upprättas. Detta är vanligtvis användbart för fält som är konfigurerbara men inte ändras ofta efter att de har ställts in.
2. Ingen kontinuerlig övervakning: Till skillnad från tvåvägs- eller envägsbindningar övervakar inte engångsbindningar kontinuerligt synmodellen för förändringar. Detta innebär att om ViewModels egenskap ändras efter den första bindningen kommer vyn inte att uppdateras automatiskt.
3. Användningsfall: Engångsbindning används ofta i scenarier där data är statiska eller sällan ändras, till exempel att ställa in statisk text från språkfiler. När ett språk har valts är det ovanligt för användaren att ändra det ofta, vilket gör en engångsbindande lämplig för sådana fall [1].
4. Återställning av bindningskällan: Om bindningskällan återställs eller återinitialiseras kommer engångsbindningen att överföra de nya data från ViewModel till vyn igen. Detta kräver emellertid uttryckliga åtgärder för att återställa bindningskällan.
5. Begränsningar i dynamiska vyer: I dynamiska vyer, till exempel de som använder "MVXRECYCLERVIEW", kanske engångsbindningar inte bete sig som förväntat om vyerna återvinns. I sådana fall kan bindningen utvärderas när åsikter återanvänds, vilket kan leda till oväntat beteende [6].
Sammanfattningsvis är MVVMCross engångsbindning utformad för scenarier där data ställs in en gång och inte behöver uppdateras dynamiskt. Det förenklar den bindande infrastrukturen genom att undvika kontinuerlig övervakning av ViewModel för förändringar, men det kräver manuell intervention för att uppdatera vyn om ViewModels data ändras efter den initiala bindningen.
Citeringar:[1] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[2] https://www.mvvmcross.com/documentation/fundamentals/dependency-injection
[3] https://learn.microsoft.com/en-us/dotnet/maui/xaml/fundamentals/mvvm?view=net-maui-9.0
]
[5] https://blog.ostebaronen.dk/2018/01/mvvmcross-binding-target.html
]
[7] https://github.com/mvvmcross/mvvmcross/issues/87
]
[9] https://learn.microsoft.com/en-us/dotnet/maui/fundamentals/data-binding/binding-mode?view=net-maui-9.0
]
[11] https://www.mvvmcross.com/documentation/advanced/customizing-using-app-and-setup