Tôi không hiểu các chế độ liên kết dữ liệu khác nhau trong WPF, chẳng hạn như:
- Một chiều
- Hai chiều
- Một lần
- Vân vân...
Mỗi chế độ này có ý nghĩa gì?
Khi nào chúng nên được sử dụng?
Câu trả lời:
OneWay: Sử dụng điều này khi bạn muốn thuộc tính liên kết cập nhật giao diện người dùng.TwoWay: Điều này có hành vi giống như OneWayvà OneWayToSourcekết hợp. Thuộc tính liên kết sẽ cập nhật giao diện người dùng và những thay đổi trong giao diện người dùng sẽ cập nhật thuộc tính liên kết (Bạn sẽ sử dụng thuộc tính này với một TextBoxhoặc một Checkboxví dụ.)OneTime: Điều này có hành vi giống như OneWayngoại trừ nó sẽ chỉ cập nhật giao diện người dùng một lần. Đây sẽ là lựa chọn mặc định của bạn để ràng buộc (vì nhiều lý do khác nhau mà tôi sẽ không giải thích ở đây), bạn chỉ nên sử dụng các loại ràng buộc khác nếu bạn thực sự cần chức năng bổ sung.OneWayToSource: Điều này ngược lại với OneWay- thay đổi giá trị giao diện người dùng cập nhật thuộc tính ràng buộc.Nếu bạn không chỉ định bất kỳ điều gì, thì hành vi sẽ phụ thuộc vào điều khiển mà bạn đang sử dụng.
Để biết thêm thông tin, hãy xem BindingModeenum trên MSDN .
Một ràng buộc bao gồm hai thực thể:
Đích phải là một DependencyObject(để ràng buộc hoạt động) và nguồn có thể là một DependencyObjecthoặc nó phải có một số cơ chế để bắt chước hệ thống WPF Binding về việc nó bị thay đổi ( INotifyPropetyChnagedGiao diện thực hiện).
MVVM khuyến nghị dự án ViewModel không có bất kỳ tham chiếu nào liên quan đến View và do đó, bạn nên sử dụng INotifyPropertyChangedgiao diện để làm cho đối tượng Nguồn được nghe bởi liên kết WPF. Ràng buộc xảy ra giữa thuộc tính Nguồn và thuộc tính của Mục tiêu (phải là a DependencyProperty). ví dụ: Thuộc tính TextPropertycủa TextBoxlớp là DataBound đến (giả sử) UserNamecủa mô hình khung nhìn. Liên kết WPF cung cấp bốn loại Ràng buộc. Hãy nhớ rằng, Binding chạy trên chuỗi giao diện người dùng trừ khi bạn chỉ định nó chạy theo cách khác.
UserName, nó sẽ phản ánh trong hộp văn bản. Đây là chi phí trung gian vì hệ thống ràng buộc chỉ xem Nguồn để biết các thay đổi.TextPropertyvà thuộc UserNametính sẽ vẫn đồng bộ và sẽ cập nhật lẫn nhau nếu một thuộc tính thay đổi. Điều này là tốn kém nhất vì hệ thống ràng buộc phải theo dõi cả hai bên để thay đổi.TextProperty, thuộc UserNametính sẽ nhận giá trị đã thay đổi. Điều này một lần nữa là chi phí trung gian vì hệ thống ràng buộc chỉ theo dõi Target cho các thay đổi.Label, ví dụ , TextBlockv.v.Nếu bạn không đề cập đến bất cứ điều gì, mọi thuộc tính đích đều có một chế độ ràng buộc mặc định được liên kết với chính nó. Ví dụ: TextPropertycủa a TextBoxcó chế độ ràng buộc mặc định là TwoWay. Đối với TextPropertycủa một TextBlocknó là một cách.
Bạn nên chọn chế độ phù hợp vì nó có thể giúp bạn giảm độ trễ của ứng dụng, đặc biệt là trong trường hợp bạn có nhiều điều khiển trong giao diện người dùng của mình.
Để biết thêm về MVVM, đây là một bài báo do tôi viết.