2009-04-07 23 views
5

Trong ứng dụng WPF của chúng tôi, chúng tôi muốn sử dụng mẫu MVVM cơ bản. Chúng tôi đã thảo luận về nó và một số sự không chắc chắn về mối quan hệ ViewModel/View và việc xác thực đã xuất hiện. Bạn có nói sau đây là một sự hiểu biết tốt về nó?ViewModel/View mối quan hệ và xác nhận

  • Mỗi View có một và chỉ một ViewModel và mục đích của ViewModel là để cung cấp Xem của nó với dữ liệu và xử lý tất cả các sự kiện Xem nó và lệnh. (Có trường hợp mà một ViewModel dịch vụ hai lần xem, ví dụ như một dạng xem biểu mẫu đầu vào XAML chuẩn và Nhập CSV cung cấp cùng một dữ liệu như biểu mẫu và do đó cần phải có cùng một xác nhận?)

  • Xác thực chỉ được xử lý bởi ViewModel khi ví dụ quan điểm ném một ChangedFocus hoặc sự kiện SaveButtonPressed vv

  • Model là khá ngớ ngẩn, chỉ đơn giản là cấu trúc dữ liệu dựa trên một hoặc nhiều bảng từ cơ sở dữ liệu, nhưng mô hình riêng của mình không xử lý ví dụ . Nó thậm chí là ViewModel xây dựng và giữ ObservableCollection của các đối tượng, ví dụ: "Khách hàng" chứ không phải chính Mô hình.

Mọi phản hồi được đánh giá cao.

Trả lời

5

Mỗi View có một và chỉ một ViewModel

Tôi nghĩ rằng nếu bạn rất nghiêm ngặt về sau lại mô hình sau đó mỗi điểm sẽ chỉ có một ViewModel. Chúng tôi có một trường hợp trong ứng dụng của chúng tôi khi các yêu cầu thay đổi giữa luồng và dễ nhất là có Chế độ xem tham chiếu hai Chế độ xem khác nhau. Tùy thuộc vào cách bạn thực hiện mẫu này có thể hoặc không thể thực hiện được.

Có trường hợp các dịch vụ một ViewModel hai lần xem

Vâng, đây là một trong những ưu điểm của mô hình.

Validation được xử lý hoàn toàn bởi các ViewModel

Không nhất thiết. Chúng tôi đã chọn để có các lớp mô hình của chúng tôi triển khai IDataErrorInfo và tự thực hiện xác thực. Điều này đảm bảo rằng không có vấn đề mà các lớp Model được sử dụng xác nhận sẽ giống nhau. Nếu việc xác nhận bao giờ cần thay đổi nó chỉ ở một nơi.

Model là khá ngớ ngẩn

Nó chỉ là như câm như bạn muốn nó được. Bạn có thể bao gồm xác nhận và quy tắc kinh doanh trong mô hình nếu bạn muốn.

1

Có trường hợp các dịch vụ một ViewModel hai lần xem

ứng dụng skin có thể tận dụng khả năng này.

Model là khá ngớ ngẩn nhưng mô hình riêng của mình không xử lý xác nhận

Mô hình này có thể được thông minh như bạn muốn. Và nó có thể bao gồm "xác nhận" để đảm bảo tính toàn vẹn, nhưng việc xác nhận đó sẽ không bao gồm các thông điệp được hiển thị trong giao diện người dùng.

3

Tôi đồng ý với tất cả những điều đã nói ở trên. Chỉ một nhận xét: mô hình chế độ xem của bạn có thể sử dụng một mô hình chế độ xem khác bên trong. Sử dụng phương pháp này, bạn có thể chia chế độ xem của mình ở một vài vùng được phân phối với các kiểu xem khác nhau. Chỉ cần sử dụng ContentPresenter, liên kết nó với thuộc tính mô hình khung nhìn cần thiết (xem mô hình xem cần thiết) và sử dụng DataTemplate để kết hợp khung nhìn cần thiết với mô hình khung nhìn của bạn.

+0

vâng tôi đã thấy điều này trong một số ví dụ trong đó ViewModel có một bộ sưu tập ViewModels trong đó, lời nhắc nhở tốt đẹp, cảm ơn –

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