2010-11-07 21 views
7

Tôi đang sử dụng WPF với mẫu MVVM và chỉ mới bắt đầu một dự án rất lớn.Cách sử dụng Quy tắc xác thực mô hình trong WPF ViewModel

Để giữ mối quan tâm tách biệt, tôi muốn đặt tất cả các quy tắc xác thực vào các mô hình dữ liệu của mình.

Nhưng khi tôi xem lại cách thực hiện xác thực WPF, tất cả các ví dụ mà tôi có thể tìm thấy cho thấy cách thực hiện nó với ViewModel đang nắm giữ các quy tắc xác thực. Một số trong những ví dụ này cho thấy một số hiểu biết sâu sắc thực sự của WPF và rất mát mẻ.

Trong ứng dụng cụ thể này, tôi có ánh xạ 1: 1 giữa các Chế độ xem chỉnh sửa và mô hình, vì vậy tôi có thể đặt nó trong ViewModels. Nhưng nó không cảm thấy đúng.

Trả lời

3

Xác thực bằng cách sử dụng IDataErrorInfo (Nếu đó là những gì bạn đang sử dụng) sẽ xảy ra trên đối tượng bị ràng buộc trên Chế độ xem.

vì vậy nếu bạn có

<TextBox Text="{Binding Name}" /> 

này sẽ được trên ViewModel. Tuy nhiên, nếu bạn phơi bày mô hình dưới dạng thuộc tính trên mô hình khung, việc xác thực sẽ xảy ra trên mô hình dữ liệu của bạn.

<TextBox Text="{Binding Model.Name}" /> 

Với sự lựa chọn đầu tiên, bạn có thể liên kết với các thuộc tính xem mô hình và lộ trình để các mô hình dữ liệu mà nó chứa các xác nhận thực tế, sau đó chỉ cần thực hiện IDataErrorInfo trên mô hình điểm và tuyến đường xác nhận với mô hình

ViewModel:

public string this[string propname] 
{ 
    get { return _model[propname]; } 
} 

này chỉ có ích nếu bạn thực sự thiết lập các thuộc tính cần thiết trên mô hình cho xác nhận để làm việc

.210

ViewModel:

public string SomeProperty 
{ 
    get { reutrn _model.SomeProperty; } 
    set { 
      _model.OtherProperty = value; 
      RaisePropertyChanged("SomeProperty"); 
     } 
} 

Tuy nhiên tôi thích những tùy chọn ràng buộc thứ hai becasuse vấn đề với điều này là nó không phải là rất khô, vì vậy tôi sẽ hầu như luôn luôn tiếp xúc với các DataModel như một thuộc tính trên mô hình view (vì đó là chịu trách nhiệm về dữ liệu) và để ViewModel quản lý mô hình cho chế độ xem, đó là nhiều hơn về cách giao diện người dùng tương tác với dữ liệu.

Trong trường hợp rất phức tạp, có thể tốt hơn để tách xác thực khỏi mô hình và chế độ xem và có cả mô hình xem và mô hình dữ liệu sử dụng nó.

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