2010-02-21 28 views

Trả lời

81
  • 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ư OneWayOneWayToSource 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ộc
  • OneTime (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.

+0

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. –

+1

@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

+0

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

16

Một ràng buộc bao gồm hai thực thể:

  1. The Source (thường ViewModel trong kịch bản MVVM)
  2. Các Target (Việc kiểm soát UI)

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.

  1. OneWay: Thuộc tínhmục tiêu sẽ lắng nghe những sở hữu nguồn được thay đổi và sẽ cập nhật chính nó. Nếu bạn lập trình thay đổi thuộc tính 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.
  2. TwoWay: Thuộc tính đích sẽ nghe thuộc tính nguồn đang thay đổi và sẽ tự cập nhật. VÀ Thuộc tính nguồn sẽ nghe thuộc tính đích được thay đổi và sẽ tự cập nhật. Cả hai 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.
  3. OneWayToSource: Thuộc tính Nguồn sẽ thay đổi nếu thuộc tính mục tiêu bị thay đổi. Nếu người dùng 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.
  4. OneTime: Điều này xảy ra một lần duy nhất trong suốt cuộc đời của ràng buộc, các Target bất động sản sẽ được cập nhật với Nguồn tài sản khi Binding xảy ra. Điều này ít tốn kém nhất và được khuyến khích cho các tình huống mà bạn có dữ liệu tĩnh được hiển thị, ví dụ: Label, TextBlock, vv

Nế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ác vấn đề liên quan