2009-05-23 28 views
6

Tôi không thể tìm ra cách để mô hình xem được thông báo về các thay đổi trong mô hình mà không cần thêm một số giao diện người dùng cụ thể như INotifyProperyChanged và INotifyCollectionChanged vào mô hình của tôi hoặc tạo ra hàng loạt sự kiện khác nhau cảm thấy như họ là giao diện người dùng cụ thể và nên tránh xa mô hình.Làm cách nào để giữ nguyên logic của mô hình và logic nghiệp vụ trong mô hình xem trong MVVM?

Nếu không, tôi chỉ phải sao chép tất cả logic nghiệp vụ trong chế độ xem để đảm bảo mọi thứ được cập nhật và sau đó là điểm của mô hình đó là gì?

Một trong những điều khó hiểu mà tôi có trong mô hình của mình là thuộc tính của lớp "Danh mục". Bạn có thể nghĩ nó như một cấu trúc cây và thuộc tính là tất cả các hậu duệ của nút lá. Cũng trong mô hình mà tài sản được tạo ra trên bay một cách đệ quy thông qua tất cả các con của nó, đó là tất cả tốt và tốt. Tuy nhiên, mô hình xem cần liên kết với thuộc tính đó và cần phải biết khi nào nó thay đổi. Tôi có nên thay đổi mô hình để phù hợp với mô hình xem không? Nếu tôi làm vậy thì mô hình xem không thực sự làm bất cứ điều gì vào thời điểm này, mô hình sẽ tăng tất cả các thông báo cần thiết về các thay đổi và chế độ xem chỉ có thể liên kết trực tiếp với mô hình. Ngoài ra nếu mô hình là một cái gì đó tôi không có nguồn gốc, làm thế nào tôi sẽ có được xung quanh này?

Trả lời

8

Tôi không đồng ý rằng INotifyPropertyChangedINotifyCollectionChanged là giao diện người dùng cụ thể. Chúng nằm trong các không gian tên và các cụm không được gắn với bất kỳ ngăn xếp UI cụ thể nào. Vì lý do đó, tôi thường đặt loại hành vi đó ở mức thấp trong hệ thống như tôi có thể (thường là lớp dữ liệu).

Nếu có lý do nào đó bạn không muốn đặt ở cấp độ đó, điều đó là tốt. Bạn có thể đặt nó ở mức cao hơn như lớp dịch vụ hoặc giao diện người dùng. Tuy nhiên, bạn cần đảm bảo rằng tất cả các thay đổi đối với cấu trúc dữ liệu cũng xảy ra thông qua lớp đó.

+0

Thực ra INotifyCollectionChanged là một phần của System.Collections.Specialized nằm trong WindowsBase.dll. Tôi đã luôn luôn tìm thấy điều này kỳ lạ. –

+0

Điểm tốt Cameron. Tôi thấy điều đó không kém phần đáng lo ngại. Cập nhật câu trả lời của tôi cho phù hợp ... –

+0

Hmm, tôi đoán thời gian duy nhất tôi từng nghe về chúng là dành cho hướng dẫn WPF cho các mục đích databinding, nhưng tôi cho rằng không có WPF vốn có về chúng ngoài chúng được sử dụng cho WPF. – Davy8

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