2009-06-08 22 views

Trả lời

9

Về sau, INotifyPropertyChanged là tiêu chuẩn và có hỗ trợ tốt hơn nhiều trong WPF. Tôi dường như nhớ lại rằng BindingList<T> chỉ tôn trọng INotifyPropertyChanged (xem HookPropertyChangedUnhookPropertyChanged trong phản xạ).

Điều này cũng hiệu quả hơn vì giao diện người dùng chỉ cần một móc sự kiện, thay vì một lần cho mỗi sự kiện - và lớp của bạn có thể hiệu quả hơn vì nó chỉ cần trường cho một trình xử lý (thay vì một trường cho mỗi thuộc tính hoặc niggle phải đi qua EventHandlerList và một bộ khóa tĩnh)

Kiểu cũ chủ yếu là sự nôn nao.

+0

Cảm ơn, tôi đã sửa tên giao diện. –

+0

Nhưng bạn có thể thấy chính mình bằng cách sử dụng này? Tôi có nghĩa là, bạn có dự kiến ​​sẽ làm một so sánh chuỗi để tìm ra những gì đã thay đổi? –

+0

Vâng, về cơ bản. Hoặc so sánh với các điều khiển giao diện người dùng thường sẽ có tên ánh xạ là một chuỗi. –

2

Thực hiện giao diện INotifyPropertyChanged sẽ mang lại cho bạn lợi ích bổ sung khi có nguồn ràng buộc tự động lắng nghe những thay đổi bạn thực hiện đối với thuộc tính của mình và cập nhật điều khiển.

Hãy thử thực hiện việc này. Tạo một lớp không có giao diện INotifyPropertyChanged và liên kết nó với một thứ gì đó. Ví dụ, bạn có thể liên kết một trong các thuộc tính của nó với thuộc tính Text của một TextBox. Thêm một nút sẽ thay đổi, không phải là văn bản của TextBox, nhưng giá trị của thuộc tính tương ứng trong cá thể được gắn kết với hộp. Chạy và nhấp vào nút. Hộp văn bản sẽ không được thông báo về thay đổi. Nếu bạn sau đó thực hiện INotifyPropertyChanged trong lớp, có setter của thuộc tính thông báo về sự thay đổi của nó thông qua PropertyChanged, ngay cả sau khi bạn lặp lại thử nghiệm, bạn sẽ thấy TextBox đang cập nhật.

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