Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Πώς το MVVMCROSS χειρίζεται ενημερώσεις όταν χρησιμοποιείτε τη μοναδική δέσμευση


Πώς το MVVMCROSS χειρίζεται ενημερώσεις όταν χρησιμοποιείτε τη μοναδική δέσμευση


Το MVVMCROSS χειρίζεται ενημερώσεις όταν χρησιμοποιείτε δέσμευση εφάπαξ με τη μεταφορά δεδομένων από το ViewModel στην προβολή μόνο μία φορά, όταν αρχικά ρυθμίζεται η πηγή δέσμευσης. Μετά από αυτή την αρχική μεταφορά, η δέσμευση δεν παρακολουθεί ενεργά τα μηνύματα αλλάζοντας μηνύματα ή συμβάντα από το ViewModel. Επομένως, τυχόν μεταγενέστερες αλλαγές στην ιδιότητα του ViewModel δεν θα αντικατοπτρίζονται στην άποψη, εκτός εάν η ίδια η πηγή δέσμευσης επαναφέρεται ή επανεγκατασταθεί.

βασικά σημεία της μοναδικής δέσμευσης στο MVVMCROSS:

1. Αρχική μεταφορά δεδομένων: Η δέσμευση μεταφέρει δεδομένα από το ViewModel στην προβολή όταν δημιουργείται για πρώτη φορά η δέσμευση. Αυτό είναι συνήθως χρήσιμο για πεδία που είναι διαμορφώσιμα αλλά δεν αλλάζουν συχνά μετά την ίδρυση.

2. Δεν υπάρχει συνεχής παρακολούθηση: Σε αντίθεση με τις δεσμεύσεις αμφίδρομης ή μονής κατεύθυνσης, οι μοναδικές συνδέσεις δεν παρακολουθούν συνεχώς το ViewModel για αλλαγές. Αυτό σημαίνει ότι εάν η ιδιότητα του ViewModel αλλάζει μετά την αρχική δέσμευση, η προβολή δεν θα ενημερωθεί αυτόματα.

3. Χρήση περιπτώσεων: Η μοναδική δέσμευση χρησιμοποιείται συνήθως σε σενάρια όπου τα δεδομένα είναι στατικά ή σπάνια αλλάζουν, όπως η ρύθμιση στατικού κειμένου από αρχεία γλώσσας. Μόλις επιλεγεί μια γλώσσα, είναι ασυνήθιστο για το χρήστη να την αλλάζει συχνά, καθιστώντας την εφάπαξ δέσμευση κατάλληλη για τέτοιες περιπτώσεις [1].

4. Επαναφορά της πηγής δέσμευσης: Εάν η πηγή δέσμευσης επαναφέρει ή επανεγκατασταθεί, η μοναδική δέσμευση θα μεταφέρει ξανά τα νέα δεδομένα από το ViewModel στην προβολή. Ωστόσο, αυτό απαιτεί ρητή δράση για την επαναφορά της πηγής δέσμευσης.

5. Περιορισμοί στις δυναμικές προβολές: Σε δυναμικές απόψεις, όπως εκείνοι που χρησιμοποιούν `mvxrecyclerview`, εφάπαξ δεσμούς μπορεί να μην συμπεριφέρονται όπως αναμένεται εάν οι απόψεις ανακυκλώνονται. Σε τέτοιες περιπτώσεις, η δέσμευση μπορεί να επανεκτιμηθεί καθώς επαναχρησιμοποιούνται οι απόψεις, γεγονός που μπορεί να οδηγήσει σε απροσδόκητη συμπεριφορά [6].

Συνοπτικά, η μοναδική δέσμευση του MVVMCROSS έχει σχεδιαστεί για σενάρια όπου τα δεδομένα έχουν ρυθμιστεί μία φορά και δεν χρειάζεται να ενημερώνονται δυναμικά. Απλοποιεί την υποδομή δέσμευσης, αποφεύγοντας τη συνεχή παρακολούθηση του ViewModel για αλλαγές, αλλά απαιτεί χειροκίνητη παρέμβαση για την ενημέρωση της προβολής εάν τα δεδομένα του ViewModel αλλάζουν μετά την αρχική δέσμευση.

Αναφορές:
[1] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[2] https://www.mvvmcross.com/documentation/fundamentals/dependency-ines
[3] https://learn.microsoft.com/en-us/dotnet/maui/xaml/fundamentals/mvvm?view=net-maui-9.0
[4] https://stackoverflow.com/questions/46558177/mvvmcross-Upates-to-bound-property-in-view-not-propag-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-data
[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