Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Πώς διαφέρει η εφάπαξ δέσμευση από τη δέσμευση μονής κατεύθυνσης στο MVVMCross


Πώς διαφέρει η εφάπαξ δέσμευση από τη δέσμευση μονής κατεύθυνσης στο MVVMCross


Στο MVVMCROSS, η μοναδική δέσμευση και η δέσμευση μονής κατεύθυνσης είναι δύο διαφορετικοί τρόποι δέσμευσης δεδομένων που εξυπηρετούν διαφορετικούς σκοπούς.

Μονή δέσμευση

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

δέσμευση μονής κατεύθυνσης

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

βασικές διαφορές

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

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

Αναφορές:
[1] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[2] https://blog.ostebaronen.dk/2018/01/mvvmcross-binding-target.html
[3] https://stackoverflow.com/questions/41768962/mvvmcross-default-binding-mode-user-in-a-project
[4] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[5] https://learn.microsoft.com/en-us/dotnet/maui/fundamentals/data-binding/binding-mode?view=net-maui-9.0
[6] https://yanxiaodi.gitbook.io/xamarin-mvvmcross-handbook/using-mvvmcross-to-create-your-first-xamarin-app/creating-the-android-projec
[7] https://www.mvvmcross.com/documentation/advanced/custom-data-binding
[8] https://github.com/mvvmcross/mvvmcross/issues/29
[9] https://stackoverflow.com/questions/27803448/data-binding-one-vs-two-way
[10] https://stackoverflow.com/questions/48910503/binding-mode-onetime-in-mvxrecyclerview
[11] https://www.reddit.com/r/javascript/comments/v993r4/askjs_why_is_oneway_binding_better_than_twoway/