Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Kaip „Mvvmcross“ tvarko atnaujinimus, kai naudojama vienkartinis įrišimas


Kaip „Mvvmcross“ tvarko atnaujinimus, kai naudojama vienkartinis įrišimas


„MVVMCross“ tvarko atnaujinimus, kai naudoja vienkartinį įrišimą, perkeldamas duomenis iš „ViewModel“ į rodinį tik vieną kartą, kai iš pradžių nustatomas įrišimo šaltinis. Po šio pradinio perdavimo iš „ViewModel“ įrišimas neaktyviai stebi pakeitimų pranešimus ar įvykius. Todėl bet kokie vėlesni „ViewModel“ savybės pakeitimai nebus atspindėti rodinyje, nebent pats įrišimo šaltinis būtų atstatytas arba iš naujo inicijuotas.

Pagrindiniai vienkartinio įrišimo taškai MVVMCross:

1. Pradinis duomenų perdavimas: įrišimo perdavimo duomenys iš „ViewModel“ į rodinį, kai pirmą kartą nustatomas įrišimas. Paprastai tai yra naudinga laukams, kurie yra konfigūruojami, tačiau po to, kai jie buvo nustatyti, dažnai nesikeičia.

2. Nėra nuolatinio stebėjimo: skirtingai nuo dvipusių ar vienpusių įrišimų, vienkartinės įrišimai nuolat nesilaiko „ViewModel“ pakeitimų. Tai reiškia, kad jei „ViewModel“ savybė pasikeis po pradinio įrišimo, rodinys nebus atnaujinamas automatiškai.

3. Naudojimo atvejai: Vienkartinis įrišimas dažniausiai naudojamas scenarijuose, kai duomenys yra statiški arba keičiasi retai, pavyzdžiui, nustatant statinį tekstą iš kalbos failų. Pasirinkus kalbą, vartotojas dažnai ją keičia, todėl vienkartinis įrišimas yra tinkamas tokiems atvejams [1].

4. Įrišimo šaltinio nustatymas: Jei įrišimo šaltinis yra iš naujo nustatytas arba iš naujo inicijuotas, vienkartinis įrišimas perkels naujus duomenis iš „ViewModel“ į rodinį. Tačiau tam reikia aiškių veiksmų, norint iš naujo nustatyti įrišimo šaltinį.

5. Dinaminių vaizdų apribojimai: dinaminiuose rodiniuose, tokiuose kaip „mvxRecyclerview“, vienkartiniai įrišimai gali elgtis ne taip, kaip tikėtasi, jei rodiniai bus perdirbti. Tokiais atvejais įrišimas gali būti iš naujo įvertintas, nes vaizdai yra pakartotinai naudojami, o tai gali sukelti netikėtą elgesį [6].

Apibendrinant galima pasakyti, kad vienkartinis „MVVMCross“ įrišimas yra skirtas scenarijams, kuriuose duomenys yra nustatyti vieną kartą ir jų nereikia dinamiškai atnaujinti. Tai supaprastina įrišimo infrastruktūrą, vengiant nuolatinio „ViewModel“ stebėjimo pakeitimams, tačiau norint atnaujinti vaizdą, reikia rankinės intervencijos, jei „ViewModel“ duomenys pasikeis po pradinio įrišimo.

Citatos:
[1] https://www.mvvmcross.com/documentation/fundamentals/data-dinding
[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-updates-to-sritul-property-in-view-not-propagating-o-property-in-in-Viewm
[5] https://blog.ostebaronen.dk/2018/01/mvvmcross-inding-arget.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-riding
[9] https://learn.microsoft.com/en-us/dotnet/maui/fundamentals/data-bining/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 ir-setup