[WPF] MVVM, Валидация
От: karbofos42 Россия  
Дата: 20.04.20 08:04
Оценка:
Как-то раньше меня данный вопрос так не волновал, а тут никак не могу определиться как лучше сделать.

VM часто сводится к набору свойств вида:
public int Value
{
  get
  {
    return model.Value;
  }
  set
  {
    model.Value = value;
    OnPropertyChanged();
  }
}


при разработке GUI есть такая рекомендация: давать пользователю вводить почти что угодно, но помечать как ошибка и максимально понятно описывать ошибку.
Допустим, мне в TextBox нужно ввести озвученный выше Value.
Стандартных подхода вроде бы 3:
1) в set'ере кидать исключения — как-то слишком жёстко и потом наличие ошибок собирать в VM как-то не очевидно и сильно привязано к WPF
2) ValidationRule — для каждой проверки создавать свой класс выглядит не очень хорошо
3) IDataErrorInfo/INotifyDataErrorInfo — не получится поймать ошибку, когда в TextBox ввели текст
Можно комбинировать подход 1 и 3, но как-то тоже не выглядит хорошим решением.

В простых случаях в VM просто создавал Value как string, а не int и уже в методе валидации проверял на ошибку приведения к числу.
Везде так делать как-то тоже не выглядит хорошей идеей.
Кроме данного случая есть и всякие enum, которые в модели не nullable, а вот в окне вполне может пользователь ничего не выбрать.
А еще всякие составные проверки, когда А < Б и более сложные определения.

Какая-то может есть устоявшаяся практика, где нормально вся валидация собирается в одном месте и ViewModel знает есть ли в ней ошибки без переборов контролов и т.п.?
Сколько ни пытался найти информации, а везде только простейшие примеры, показывающие как всё легко и просто.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.