MVVMCROSS apstrādā atjauninājumus, izmantojot vienreizēju iesiešanu, pārsūtot datus no ViewModel uz skatu tikai vienu reizi, kad sākotnēji tiek iestatīts iesiešanas avots. Pēc šīs sākotnējās pārsūtīšanas saistīšanās aktīvi netiek uzraudzīta no ViewModel ziņojumiem vai notikumiem. Tāpēc visas turpmākās izmaiņas ViewModel īpašumā netiks atspoguļotas skatā, ja vien pats saistošais avots netiks atiestatīts vai atkārtoti inicializēts.
vienreizējas iesiešanas galvenie punkti MVVMCROSS:
1. Sākotnējā datu pārsūtīšana: Iesaistošie dati pārsūta no ViewModel uz skatu, kad iesiešana pirmo reizi tiek izveidota. Tas parasti ir noderīgs laukiem, kas ir konfigurējami, bet pēc iestatīšanas bieži nemainās.
2. Nav nepārtraukta uzraudzības: Atšķirībā no divvirzienu vai vienvirziena iesiešanas, vienreizējie iesiešanas gadījumi nepārtraukti neuzrauga ViewModel, lai veiktu izmaiņas. Tas nozīmē, ka, ja ViewModel īpašums mainīsies pēc sākotnējās iesiešanas, skats netiks automātiski atjaunināts.
3. Lietošanas gadījumi: vienreizēju iesiešanu parasti izmanto scenārijos, kad dati ir statiski vai reti mainās, piemēram, statiskā teksta iestatīšana no valodas failiem. Kad valoda ir izvēlēta, lietotājam ir retums to bieži mainīt, vienreizēju iesiešanu piemērotu šādiem gadījumiem [1].
4. Iesiešanas avota atiestatīšana: Ja saistošais avots tiek atiestatīts vai atkārtoti inicializēts, vienreizējā saistīšana atkal pārsūtīs jaunos datus no skataModeļa uz skatu. Tomēr tas prasa skaidru darbību, lai atiestatītu saistošo avotu.
5. Dinamisko skatījumu ierobežojumi: Dinamiskos skatos, piemēram, tādos, kas izmanto `MVXRecCyclerView`, vienreizēja iesiešana var neuzvedieties, kā paredzēts, ja skati tiek pārstrādāti. Šādos gadījumos saistību var atkārtoti novērtēt, jo tiek atkārtoti izmantoti uzskati, kas var izraisīt negaidītu izturēšanos [6].
Rezumējot, MVVMCROSS vienreizējā iesiešana ir paredzēta scenārijiem, kad dati tiek iestatīti vienreiz un nav dinamiski jāatjaunina. Tas vienkāršo saistošo infrastruktūru, izvairoties no nepārtrauktas ViewModel uzraudzības izmaiņām, taču, lai atjauninātu skatu, ir nepieciešama manuāla iejaukšanās, ja ViewModel dati mainās pēc sākotnējās saistīšanās.
Atsauces:[1] https://www.mvvmcross.com/documentation/fundamentals/data
[2] https://www.mvvmcross.com/documentation/fundamentals/dependence-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-tonging-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
[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/customing-using-app-and-setup