MVVMCross behandelt updates bij het gebruik van eenmalige binding door gegevens van het ViewModel slechts eenmaal naar de weergave over te dragen, wanneer de bindende bron in eerste instantie wordt ingesteld. Na deze eerste overdracht controleert de binding niet actief wijzigingsberichten of gebeurtenissen vanuit het ViewModel. Daarom worden eventuele latere wijzigingen in de eigenschap van het ViewModel niet weerspiegeld in de weergave tenzij de bindende bron zelf wordt gereset of opnieuw wordt geïnitialiseerd.
Belangrijkste punten van eenmalige binding in MVVMCross:
1. Initiële gegevensoverdracht: de bindende gegevens overbrengen van het ViewModel naar de weergave wanneer de binding voor het eerst wordt vastgesteld. Dit is meestal handig voor velden die configureerbaar zijn, maar niet vaak veranderen nadat ze zijn ingesteld.
2. Geen continue monitoring: in tegenstelling tot tweeweg- of eenrichtingsbindingen, controleren eenmalige bindingen het viewModel niet continu op wijzigingen. Dit betekent dat als de eigenschap van het ViewModel na de initiële binding verandert, de weergave niet automatisch wordt bijgewerkt.
3. Gebruiksgevallen: eenmalige binding wordt vaak gebruikt in scenario's waarbij de gegevens statisch zijn of zelden wijzigingen zijn, zoals het instellen van statische tekst uit taalbestanden. Zodra een taal is geselecteerd, is het voor de gebruiker ongewoon om deze vaak te wijzigen, waardoor eenmalige binding geschikt is voor dergelijke gevallen [1].
4. Reset de bindende bron: als de bindingsbron wordt gereset of opnieuw wordt geïnitialiseerd, zal de eenmalige binding de nieuwe gegevens van het ViewModel opnieuw naar de weergave overbrengen. Dit vereist echter expliciete actie om de bindende bron te resetten.
5. Beperkingen in dynamische weergaven: in dynamische weergaven, zoals die van `mvxrecyclerview`, eenmalige bindingen kunnen zich niet gedragen zoals verwacht als de weergaven worden gerecycled. In dergelijke gevallen kan de binding opnieuw worden geëvalueerd naarmate de weergaven worden hergebruikt, wat kan leiden tot onverwacht gedrag [6].
Samenvattend is de eenmalige binding van MVVMCross ontworpen voor scenario's waarbij gegevens eenmaal worden ingesteld en niet dynamisch hoeft te worden bijgewerkt. Het vereenvoudigt de bindende infrastructuur door continue monitoring van het ViewModel voor wijzigingen te vermijden, maar het vereist handmatige interventie om de weergave bij te werken als de gegevens van het ViewModel na de initiële binding verandert.
Citaten:[1] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[2] https://www.mvvmcross.com/documentation/fundamentals/dependency-injectie
[3] https://learn.microsoft.com/en-us/dotnet/maui/xaml/fundamentals/mvvm?view=net-maui -9.0
[4] https://stackoverflow.com/questions/46558177/mvvmcross-updates-to-bound-property-in-view-not-propaging-to-property-in-viewm
[5] https://blog.ostebaronen.dk/2018/01/mvvmcross-binding-target.html
[6] https://stackoverflow.com/questions/48910503/binding-mode-onetime-in-mvxrecyclerview
[7] https://github.com/mvvmcross/mvvmcross/issues/87
[8] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/march/async-programming-patterns-for-asynchronous-mvvm-applications-data-binding
[9] https://learn.microsoft.com/en-us/dotnet/maui/fundamentals/data-binding/binding-mode?view=net-maui-9.0
[10] https://www.reddit.com/r/dotnetmaui/comments/103ai8p/mvvm_problems_having_troubles_with_data_bindings/
[11] https://www.mvvmcross.com/documentation/advanced/customizing-using-app-and-setup