2012-06-08 24 views
10

Gần đây tôi đã tìm ra rằng wpf xử lý INotifyPropertyChanged theo hai cách khác nhau. Tôi chỉ muốn biết lý do là gì.Tại sao WPF ràng buộc xử lý INotifyPropertyChanged theo hai cách khác nhau?

Hãy để chúng tôi thực hiện liên kết hai chiều bình thường với xác thực đúng.

nếu bạn đặt thuộc tính từ ui thành chế độ xem, mô hình sẽ giống như thế này.

  • gọi setter bắt đầu
  • giá trị thiết lập
  • INotifyPropertyChanged bắt đầu
  • INotifyPropertyChanged làm
  • setter làm
  • getter gọi và thực hiện
  • IDataErrorInfo gọi và thực hiện

nhưng nếu bạn thiết lập thuộc tính trong viewmodel của bạn nó đi như thế

  • gọi setter này bắt đầu
  • giá trị thiết lập
  • INotifyPropertyChanged bắt đầu
  • getter gọi và thực hiện
  • IDataErrorInfo gọi và thực hiện
  • INotifyPropertyChanged done
  • setter done

Trả lời

11

Thay đổi thuộc tính từ giao diện người dùng thành ViewModel có thể dẫn đến tình trạng bế tắc có thể chạy vào các cuộc gọi ít đệ quy hơn trong các trường hợp hai chiều. Để ngăn chặn điều này xảy ra, khi WPF thay đổi mô hình, nó sẽ tiếp tục theo dõi các thay đổi qua INotifyPropertyChanged, nhưng thay đổi này sẽ được xếp hàng đợi trong hàng đợi điều phối, và nó sẽ được thực thi sau khi cập nhật hiện tại của nó kết thúc.

Vì thay đổi trong chế độ xem không được khởi tạo bởi WPF, WPF sẽ không xếp hàng hoạt động, nó sẽ ngay lập tức thực hiện thay đổi.

+0

điều này có ý nghĩa. thx rất nhiều – blindmeis

+0

giải thích tốt –

Các vấn đề liên quan