MVVMCROSS håndterer oppdateringer når du bruker engangsbinding ved å overføre data fra ViewModel til visningen bare en gang, når bindingskilden opprinnelig er satt. Etter denne første overføringen overvåker ikke bindingen aktivt endringsmeldinger eller hendelser fra ViewModel. Derfor vil alle påfølgende endringer i ViewModels eiendom ikke gjenspeiles i synet med mindre den bindende kilden i seg selv tilbakestilles eller reinitialiseres.
Nøkkelpunkter for engangsbinding i MVVMCROSS:
1. Opprinnelig dataoverføring: Bindingen overfører data fra ViewModel til visningen når bindingen først er etablert. Dette er vanligvis nyttig for felt som er konfigurerbare, men som ikke endres ofte etter at de er satt.
2. Ingen kontinuerlig overvåking: I motsetning til toveis- eller enveisbindinger, overvåker ikke engangsbindinger kontinuerlig visningsmodellen for endringer. Dette betyr at hvis ViewModels egenskap endres etter den første bindingen, vil ikke visningen oppdateres automatisk.
3. Bruk tilfeller: Engangsbinding brukes ofte i scenarier der dataene er statiske eller sjelden endres, for eksempel å sette statisk tekst fra språkfiler. Når et språk er valgt, er det uvanlig at brukeren endrer det ofte, noe som gjør engangsbinding egnet for slike tilfeller [1].
4. Tilbakestilling av bindingskilden: Hvis bindingskilden tilbakestilles eller reinitialiseres, vil engangsbindingen overføre de nye dataene fra ViewModel til visningen igjen. Dette krever imidlertid eksplisitt handling for å tilbakestille den bindende kilden.
5. Begrensninger i dynamiske visninger: I dynamiske synspunkter, for eksempel de som bruker `mvxrecyclerview`, kan engangsbindinger ikke oppføre seg som forventet hvis visningene blir resirkulert. I slike tilfeller kan bindingen vurderes på nytt når synspunkter gjenbrukes, noe som kan føre til uventet oppførsel [6].
Oppsummert er MVVMCROSSs engangsbinding designet for scenarier der data er satt en gang og ikke trenger å oppdateres dynamisk. Det forenkler den bindende infrastrukturen ved å unngå kontinuerlig overvåking av ViewModel for endringer, men det krever manuell intervensjon for å oppdatere visningen hvis ViewModels data endres etter den første bindingen.
Sitasjoner:[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
[4] https://stackoverflow.com/questions/46558177/mvvmcross-pdates-to-bound-property-in-view-not-propagating-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_trouble_with_data_bindings/
[11] https://www.mvvmcross.com/documentation/advanced/customizing-using-apps-av-and-setup