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ư OneWay
và OneWayToSource
kế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 TextBox
hoặc một Checkbox
ví dụ.)OneTime
: Điều này có hành vi giống như OneWay
ngoạ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 BindingMode
enum 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 DependencyObject
hoặ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 ( INotifyPropetyChnaged
Giao 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 INotifyPropertyChanged
giao 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 TextProperty
của TextBox
lớp là DataBound đến (giả sử) UserName
củ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.TextProperty
và thuộc UserName
tí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 UserName
tí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ụ , TextBlock
v.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ụ: TextProperty
của a TextBox
có chế độ ràng buộc mặc định là TwoWay
. Đối với TextProperty
của một TextBlock
nó 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.