2012-04-24 25 views
8

The MSDN reference page for ObservableCollection<T> ghi chú:.Khi sử dụng ObservableCollection <T>, tôi vẫn cần triển khai INotifyPropertyChanged trên loại T?

"Các đối tượng trong bộ sưu tập của bạn phải đáp ứng các yêu cầu mô tả trong Binding Sources Overview Đặc biệt, nếu bạn đang sử dụng OneWay hoặc TwoWay (ví dụ, bạn muốn giao diện người dùng của bạn để cập nhật khi các thuộc tính nguồn thay đổi động), bạn phải triển khai một cơ chế thông báo thay đổi thuộc tính thích hợp chẳng hạn như giao diện INotifyPropertyChanged. "

Kể từ ObservableCollection<T> đã thực hiện INotifyPropertyChanged, tại sao tôi cần phải một lần nữa thực hiện INotifyPropertyChanged trên T cũng?

Trả lời

7

Xem xét bộ sưu tập quan sát của bạn dưới dạng nguồn dữ liệu cho bảng. Mỗi đối tượng từ bộ sưu tập chiếm một hàng và được hiển thị trong bảng trên nhiều cột.

Chế độ xem (nghĩa là bảng của bạn) cần phải biết khi nào sửa đổi từng ô để phản hồi các thuộc tính thay đổi của đối tượng, đồng thời trả lời thêm và xóa đối tượng vào và ra khỏi bộ sưu tập.

Bộ sưu tập quan sát của bạn sẽ xử lý hàng bảng: nó thông báo cho người quan sát khi đối tượng được chèn, xóa, di chuyển, v.v. Tuy nhiên, nó thiếu kiến ​​thức về những gì đang xảy ra với các đối tượng riêng lẻ, do đó, nó không giúp đỡ trong việc xử lý các cột bảng .

Đây là nơi các đối tượng của bạn đến: bằng cách triển khai INotifyPropertyChanged chúng cho phép bảng của bạn quản lý dữ liệu trong các cột.

+0

Giải thích hợp lý tuyệt vời. Sạch sẽ và rõ ràng. +1 – TripleAntigen

3

INotifyPropertyChanged cần được nâng lên bởi đối tượng có thuộc tính đang thay đổi. ObservableCollection không thể chỉ đơn giản là phát hiện các thay đổi trong các đối tượng mà nó chứa và chuyển những thay mặt bạn.

Lý do bộ sưu tập thực hiện INotifyPropertyChanged không đặc biệt hữu ích. Tôi nghi ngờ nó sẽ chỉ tăng sự kiện thay đổi cho thuộc tính Count của bộ sưu tập sẽ thay đổi khi các mục được thêm/xóa vào bộ sưu tập.

Nếu bạn chỉ quan tâm đến các mục được thêm/xóa, bạn có thể không cần triển khai giao diện này trong lớp học của mình. Nhưng nếu giao diện người dùng của bạn có ràng buộc với các thuộc tính của đối tượng, bạn sẽ cần triển khai nó nếu bạn muốn giao diện người dùng phản ứng.

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