Dalam MVVMCross, ikatan satu kali dan pengikatan dua arah melayani tujuan berbeda dalam mengelola interaksi antara tampilan dan viewmodel.
Binding satu kali
Ikatan satu kali digunakan untuk mentransfer data dari viewmodel ke tampilan hanya sekali, ketika sumber pengikat diatur. Setelah transfer awal ini, ikatan tidak memantau perubahan pada properti ViewModel dan tidak memperbarui tampilan kecuali sumber pengikat itu sendiri diatur ulang. Mode ini berguna untuk bidang yang dapat dikonfigurasi tetapi tidak sering berubah setelah diatur. Misalnya, di MVVMCross, pengikatan satu kali digunakan untuk mengatur teks statis dari file bahasa, karena pengguna biasanya memilih bahasa sekali dan jarang mengubahnya setelah itu [1] [10].
Ikatan dua arah
Ikatan dua arah, di sisi lain, membangun koneksi dua arah yang berkelanjutan antara tampilan dan viewmodel. Perubahan pada tampilan atau pembaruan pemicu ViewModel di yang lain. Mode ini sangat berguna ketika mengedit data yang ada, seperti mengisi formulir, di mana baik input pengguna dan setiap perubahan dari viewmodel perlu tercermin secara real-time. Ikatan dua arah umumnya digunakan dalam MVVMCross dan sering berfungsi sebagai mode default untuk binding baru [1] [2].
Perbedaan utama
-Arah Aliran Data: Ikatan satu kali hanya memperbarui tampilan dari viewmodel sekali, sementara pengikatan dua arah memperbarui baik tampilan maupun viewmodel secara terus menerus.
-Ubah Pemantauan: Ikatan satu kali tidak memantau perubahan setelah pembaruan awal, sedangkan pengikatan dua arah terus memantau dan memperbarui kedua ujungnya.
-Kasus Penggunaan: Satu kali sangat ideal untuk data statis atau jarang mengubah, sedangkan dua arah lebih cocok untuk bentuk interaktif atau pertukaran data dinamis.
Singkatnya, pengikatan satu kali digunakan untuk pengaturan data statis atau awal, sedangkan pengikatan dua arah digunakan untuk skenario interaktif di mana tampilan dan viewmodel perlu mencerminkan perubahan satu sama lain secara real-time.
Kutipan:[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-binding-differ-from-simple-2uto-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-droid-procject/understanding-the-data-binding-syntax
[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-mau-9.0
[12] https://www.reddit.com/r/javascript/comments/v993r4/askjs_why_is_oneway_binding_better_than_twoway/