Tôi không hiểu các dữ liệu khác nhau ràng buộc chế độ trong WPF, chẳng hạn như:Các chế độ ràng buộc WPF khác nhau là gì?
- One-Way
- Two-Way
- One-Time
- vv ...
Mỗi chế độ này có nghĩa là gì?
Khi nào chúng nên được sử dụng?
Tôi không hiểu các dữ liệu khác nhau ràng buộc chế độ trong WPF, chẳng hạn như:Các chế độ ràng buộc WPF khác nhau là gì?
Mỗi chế độ này có nghĩa là gì?
Khi nào chúng nên được sử dụng?
OneWay
: Sử dụng tính năng này khi bạn muốn thuộc tính bị ràng buộc cập nhật giao diện người dùng.TwoWay
: Điều này có cùng hành vi như OneWay
và OneWayToSource
kết hợp. Thuộc tính ràng buộc 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 ràng buộcOneTime
(Bạn sẽ sử dụng điều này với một TextBox
hoặc một Checkbox
ví dụ.): Đây có hành vi tương tự như OneWay
trừ nó sẽ chỉ cập nhật giao diện người dùng một lần. Điều này sẽ là lựa chọn mặc định của bạn cho ràng buộc (vì nhiều lý do 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 thêm chức năng.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 bị ràng buộc.Nếu bạn không chỉ định bất cứ điều gì, thì hành vi sẽ tùy thuộc vào điều khiển bạn đang sử dụng.
Để biết thêm thông tin, hãy xem BindingMode
enum on MSDN.
Một ràng buộc bao gồm hai thực thể:
Mục tiêu có là DependencyObject
(để gắn kết với công việc) và nguồn có thể là DependencyObject
hoặc cần có một số cơ chế để bắt chước hệ thống ràng buộc WPF m về nó đang được thay đổi (Implemeting INotifyPropetyChnaged
interface).
MVVM khuyến cáo các dự án ViewModel được giải phóng khỏi bất kỳ Xem liên quan tham khảo và do đó nó được khuyến khích để sử dụng giao diện INotifyPropertyChanged
để làm cho đối tượng Nguồn được nghe bởi WPF ràng buộc. Ràng buộc xảy ra giữa một tài sản của Nguồn và một tài sản của Mục tiêu (phải là DependencyProperty
). ví dụ: Lớp TextProperty
của lớp TextBox
là DataBound (nói) UserName
thuộc tính của mô hình chế độ xem. ràng buộc WPF cung cấp bốn loại ràng buộc. Hãy nhớ rằng, Ràng buộc chạy trên chuỗi giao diện người dùng trừ khi bạn chỉ định nó để chạy khác.
UserName
của ViewwModel, 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 để thay đổi.TextProperty
và thuộc tính UserName
sẽ vẫn được đồng bộ hóa và sẽ cập nhật cho nhau nếu một thay đổi. Điều này là tốn kém nhất khi hệ thống ràng buộc phải xem cả hai mặt để thay đổi.TextProperty
, thuộc tính UserName
sẽ mất 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ỉ xem Mục tiêu để thay đổi.Label
, TextBlock
, vvNếu bạn không đề cập bất cứ điều gì, mỗi mục tiêu tài sản có một chế độ ràng buộc mặc định đi kèm với chính nó. Ví dụ. số TextProperty
của số TextBox
có chế độ ràng buộc mặc định là TwoWay
. Đối với số TextProperty
của số TextBlock
, đó 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 thời gian chờ của ứng dụng, đặc biệt trong trường hợp bạn có số lượng lớn các điều khiển trong giao diện người dùng của mình.
Để biết thêm về MVVM here là một bài viết do tôi viết.
Cảm ơn. nó là hữu ích ... Nhưng plz chỉ định ví dụ TwoWay ... tôi muốn biết làm thế nào nó phản ánh code-behind. –
@DATT: ý của bạn là gì? Về cơ bản, nếu bạn đặt Mode = TwoWay trong XAML, khi bạn thay đổi giá trị GUI, nó sẽ tự động cập nhật thuộc tính C#. Nhưng thuộc tính của bạn trong mã-đằng sau cần phải được thực hiện trong một lớp (như một ViewModel) thực hiện giao diện INotifyPropertyChanged. Khi code-behind thay đổi giá trị của thuộc tính thông qua set, bạn cần gọi PropertyChanged để GUI được thông báo về thay đổi giá trị, và nó sẽ tự động cập nhật. – Dave
Nếu bạn không chỉ định bất cứ điều gì, thì hành vi sẽ phụ thuộc vào THUỘC TÍNH mà bạn đang sử dụng. – sam