Проверки в MVVM - модели o модель представления?
Привет,
я пытаюсь реализовать проверку в приложении MVVM WPF C#.
В шаблоне MVVM лучше ли реализовать проверку (с помощью IDataErrorInfo) в модели o в ViewModel?
Что я уже пробовал:
На данный момент я реализовал валидацию внутри части модели.
модель представления:
private Order selectedOrder; public Order SelectedOrder { get { return selectedOrder; } set { selectedOrder= value; OnPropertyChanged("SelectedOrder"); } }
в рамках модели у меня есть определение порядка классов:
public class Order : Notifier, IDataErrorInfo { private string _NumOrder = ""; public string NumOrder { get { return _NumOrder; } set { _NumOrder = value; OnPropertyChanged("NumOrder"); } } #region IDataErrorInfo string IDataErrorInfo.Error { get { return null; } } string IDataErrorInfo.this[string propertyName] { get { return GetValidationError(propertyName); } } #endregion #region Validation static readonly string[] ValidateProperty = { "NumOrder" }; public bool IsValid { get { foreach(string property in ValidateProperty) if (GetValidationError(property) != null) return false; return true; } } public string ValidateOrder() { if (String.IsNullOrWhiteSpace(numOrder)) { return "Error, i need a value"; } return null; } string GetValidationError(String propertyName) { string error = null; switch (propertyName) { case "NumOrder": error = ValidateOrder(); break; } return error; } #endregion }
В представлении я пытаюсь отобразить ошибку, но она не работает.
<TextBox x:Name="txtNumOrder" FontSize="14" IsEnabled="{Binding ActionInRun,ConverterParameter=NumOrder, Converter={StaticResource EnumToBoolean}}" Text="{Binding SelectedOrder.numOrder, Mode=TwoWay, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}"/> <Label FontSize="12" x:Name="lblNote" Content="{Binding ElementName=numOrder, Path=(Validation.Errors).CurrentItem.ErrorContent}" />
Потому что в поле текстового поля проверка работает правильно, но метка не показывает сообщение об ошибке.
Как я могу правильно отобразить ошибку?
Заранее спасибо