Проверка в WPF - пользовательское правило проверки или IDataErrorInfo - PullRequest
9 голосов
/ 05 декабря 2010

Как новый программист WPF, я не могу найти разницу между двумя различными способами проверки ввода пользователя:

Каковы плюсы и минусы написания пользовательского правила валидации против реализации IDataErrorInfo и наоборот? Когда я предпочитаю одно другому?

Обновление:

Хотя я уже получил свой ответ, я нашел связанную статью , которая может помочь другим.

Ответы [ 3 ]

20 голосов
/ 06 декабря 2010

В основном, если вы реализуете IDataErrorInfo, проверка выполняется в связанном объекте, тогда как если вы реализуете правила проверки, проверка реализуется в объектах, прикрепленных к привязке.

Лично, если вы используете MVVM, я думаю, вы должны быть безумны, чтобы использовать что-либо, кроме IDataErrorInfo. Вы хотите проверки, чтобы жить в модели представления. Если это в вашей модели представления, она централизована и может быть проверена. Если это по вашему мнению, то ваша логика проверки может быть неправильной или отсутствующей, и единственный способ найти ее - это вручную проверить ваше представление. Это огромный потенциальный источник ошибок, которых можно избежать.

Есть места, где имеет смысл использовать правила проверки - например, если вы строите пользовательский интерфейс вокруг тупых объектов (например, XmlDataSource). Но для большинства производственных приложений я бы не стал подходить к этому.

1 голос
/ 30 сентября 2013

IDataErrorInfo

  • Валидационная логика поддерживает вид модели и проста в реализации и обслуживании
  • Полный контроль над всеми полями в viewmodel

Правило валидации

  • Поддерживает правило проверки в отдельном классе
  • Увеличение повторного использования. Например, вы можете реализовать обязательное поле класс валидации повторно использовать его во всем приложении.

Мое мнение таково: для обычной проверки, такой как обязательные проверки полей, проверки адресов электронной почты вы можете использовать правило проверки. Если вам нужно выполнить пользовательские проверки, такие как проверки диапазона или любую другую пользовательскую проверку, используйте IDataerrorinfo.

0 голосов
/ 05 декабря 2010

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

...