Member 11091382 Ответов: 1

Проверки в 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}" />


Потому что в поле текстового поля проверка работает правильно, но метка не показывает сообщение об ошибке.
Как я могу правильно отобразить ошибку?
Заранее спасибо

1 Ответов

Рейтинг:
8

#realJSOP

Проверка должна выполняться в представлении или viewmodel. Проверьте эту статью: Проверки в WPF[^]


johannesnestler

согласованный