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ó.