Στο MVVMCROSS, η μοναδική δέσμευση και η αμφίδρομη δέσμευση εξυπηρετούν ξεχωριστούς σκοπούς στη διαχείριση της αλληλεπίδρασης μεταξύ της προβολής και του ViewModel.
Μονή δέσμευση
Η μοναδική δέσμευση χρησιμοποιείται για τη μεταφορά δεδομένων από το ViewModel στην προβολή μόνο μία φορά, όταν έχει οριστεί η πηγή δέσμευσης. Μετά από αυτή την αρχική μεταφορά, η δέσμευση δεν παρακολουθεί τις αλλαγές στις ιδιότητες του ViewModel και δεν ενημερώνει την προβολή εκτός εάν η ίδια η πηγή δέσμευσης επαναφέρεται. Αυτή η λειτουργία είναι χρήσιμη για πεδία που είναι διαμορφώσιμα αλλά δεν αλλάζουν συχνά μετά την ρύθμιση. Για παράδειγμα, στο MVVMCROSS, η μοναδική δέσμευση χρησιμοποιείται για τη ρύθμιση στατικού κειμένου από τα αρχεία γλώσσας, καθώς ο χρήστης συνήθως επιλέγει μια γλώσσα μία φορά και σπάνια το αλλάζει αργότερα [1] [10].
δέσμευση αμφίδρομης
Η αμφίδρομη δέσμευση, από την άλλη πλευρά, δημιουργεί μια συνεχή, αμφίδρομη σύνδεση μεταξύ της προβολής και του ViewModel. Αλλαγές είτε στην προβολή είτε στο ViewModel Trigger Updates στο άλλο. Αυτή η λειτουργία είναι ιδιαίτερα χρήσιμη κατά την επεξεργασία υφιστάμενων δεδομένων, όπως η συμπλήρωση των εντύπων, όπου και οι δύο εισροές του χρήστη και τυχόν αλλαγές από το ViewModel πρέπει να αντικατοπτρίζονται σε πραγματικό χρόνο. Η αμφίδρομη δέσμευση χρησιμοποιείται συνήθως στο MVVMCross και συχνά χρησιμεύει ως προεπιλεγμένη λειτουργία για νέες δεσμεύσεις [1] [2].
βασικές διαφορές
-Κατεύθυνση της ροής δεδομένων: Η μοναδική δέσμευση ενημερώνει μόνο την προβολή από το 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://www.mvvmcross.com/documentation/advanced/custom-data-binding
[4] https://softwareengineering.stackexchange.com/questions/322450/how-does-two-way-data-differ-from-simple-sync
[5] https://stackoverflow.com/questions/17156368/
[6] https://yanxiaodi.gitbook.io/xamarin-mvvmcross-handbook/using-mvvmcross-to-create-your-first-xamarin-app/creating-the-android-projec
[7] https://stackoverflow.com/questions/13504906/what-is-two-way 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://learn.microsoft.com/en-us/dotnet/maui/fundamentals/data-binding/binding-mode?view=net-maui-9.0
[12] https://www.reddit.com/r/javascript/comments/v993r4/askjs_why_is_oneway_binding_better_than_twoway/