Trong MVVMcross, ràng buộc một lần và ràng buộc hai chiều phục vụ các mục đích riêng biệt trong việc quản lý sự tương tác giữa chế độ xem và chế độ xem.
ràng buộc một lần
Liên kết một lần được sử dụng để chuyển dữ liệu từ chế độ xem sang chế độ xem một lần, khi nguồn liên kết được đặt. Sau khi chuyển ban đầu này, ràng buộc không giám sát các thay đổi đối với các thuộc tính của ViewModel và không cập nhật chế độ xem trừ khi chính nguồn liên kết được đặt lại. Chế độ này rất hữu ích cho các trường có thể định cấu hình nhưng không thay đổi thường xuyên sau khi được đặt. Ví dụ: trong MVVMcross, ràng buộc một lần được sử dụng để đặt văn bản tĩnh từ các tệp ngôn ngữ, vì người dùng thường chọn ngôn ngữ một lần và hiếm khi thay đổi nó sau đó [1] [10].
Liên kết hai chiều
Mặt khác, ràng buộc hai chiều thiết lập kết nối liên tục, hai chiều giữa chế độ xem và chế độ xem. Các thay đổi trong Chế độ xem hoặc Bản cập nhật kích hoạt ViewModel trong quan điểm khác. Chế độ này đặc biệt hữu ích khi chỉnh sửa dữ liệu hiện có, chẳng hạn như điền vào các biểu mẫu, trong đó cả đầu vào của người dùng và bất kỳ thay đổi nào từ ViewModel cần được phản ánh trong thời gian thực. Liên kết hai chiều thường được sử dụng trong MVVMcross và thường đóng vai trò là chế độ mặc định cho các ràng buộc mới [1] [2].
Sự khác biệt chính
-Hướng của luồng dữ liệu: Binding một lần chỉ cập nhật chế độ xem từ ViewModel một lần, trong khi ràng buộc hai chiều cập nhật cả chế độ xem và ViewModel liên tục.
-Thay đổi giám sát: Liên kết một lần không giám sát các thay đổi sau bản cập nhật ban đầu, trong khi ràng buộc hai chiều liên tục theo dõi và cập nhật cả hai đầu.
-Các trường hợp sử dụng: Một lần là lý tưởng cho dữ liệu thay đổi tĩnh hoặc không thường xuyên, trong khi hai chiều phù hợp hơn cho các hình thức tương tác hoặc trao đổi dữ liệu động.
Tóm lại, liên kết một lần được sử dụng để thiết lập dữ liệu tĩnh hoặc ban đầu, trong khi liên kết hai chiều được sử dụng cho các kịch bản tương tác trong đó cả chế độ xem và ViewModel cần phản ánh những thay đổi của nhau trong thời gian thực.
Trích dẫn:[1] https://www.mvvmcross.com/documentation/fundaments/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-auto-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-project/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-maui-9.0
[12] https://www.reddit.com/r/javascript