Как использовать правила проверки модели в WPF ViewModel - PullRequest
7 голосов
/ 08 ноября 2010

Я использую WPF с шаблоном MVVM и только начинаю очень большой проект.

Чтобы разделить проблемы, я хочу включить все свои правила проверки в мои модели данных.

Но когда я рассматриваю, как выполнить проверку WPF, все примеры, которые я могу найти, показывают, как это сделать с ViewModel, содержащим правила проверки. Некоторые из этих примеров демонстрируют глубокое понимание WPF и очень крутые.

В этом конкретном приложении у меня есть отображение 1: 1 между редактируемыми моделями и моделями, так что я мог бы поместить его в модели просмотра. Но это просто нехорошо.

1 Ответ

3 голосов
/ 08 ноября 2010

Проверка с использованием IDataErrorInfo (если это то, что вы используете) произойдет на объекте, который связан с представлением.

так что если у вас есть

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

это будет на ViewModel. Однако если вы представите модель как свойство в модели представления, проверка будет выполняться в вашей модели данных.

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

При первом выборе вы можете привязать свойства модели представления и направить его в модель данных, где она содержит фактическую проверку, затем просто внедрить IDataErrorInfo в модель представления и направить проверку в модель

ViewModel:

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

Это полезно только в том случае, если вы фактически задаете необходимые свойства модели для проверки работоспособности

ViewModel:

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

Однако я предпочитаю второй вариант связывания, потому что проблема в том, что он не очень СУХОЙ, поэтому я почти всегда буду представлять DataModel как свойство модели представления (так как оно отвечает за данные) и оставляю ViewModel, управляющий моделью для представления, которая больше о том, как пользовательский интерфейс взаимодействует с данными.

В очень сложных сценариях может быть лучше отделить валидацию от модели и модели представления и использовать ее как для модели представления, так и для модели данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...