Рекомендации WPF по привязке данных и правилам проверки

У меня очень простое приложение WPF, в котором я использую привязку данных для редактирования некоторых пользовательских объектов CLR. Теперь я хочу поместить некоторую проверку ввода, когда пользователь нажимает на сохранение. Однако все книги WPF, которые я прочитал, на самом деле не посвящают этому вопросу. Я вижу, что вы можете создавать пользовательские ValidationRules, но мне интересно, будет ли это излишним для моих нужд.

Итак, мой вопрос заключается в следующем: есть ли хорошее примерное приложение или статья где-нибудь, демонстрирующая наилучшую практику для проверки ввода пользователя в WPF?

Ответ 1

Я думаю, что новым предпочтительным способом может быть использование IDataErrorInfo

Подробнее здесь

Ответ 2

От MS Документация по шаблонам и практике:

Проверка данных и отчетность об ошибках

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

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

Однако, исключая исключения из свойства таким образом должны быть избегать, где это возможно. Альтернатива подход заключается в IDataErrorInfo или INotifyDataErrorInfo интерфейсы на вашей модели или модели просмотра классы. Эти интерфейсы позволяют просмотреть модель или модель для выполнения данных валидация для одного или нескольких объектов значения и вернуть сообщение об ошибке на вид, чтобы пользователь мог уведомление об ошибке.

Далее приводится документация, поясняющая, как реализовать IDataErrorInfo и INotifyDataErrorInfo.

Ответ 3

personaly, я использую исключения для проверки валидации. он требует следующих шагов:

  • в выражении привязки данных, вам нужно добавить "ValidatesOnException = True"
  • В вашем объекте данных, к которому вы привязаны, вам нужно добавить обработчик DependencyPropertyChanged, где вы проверяете, соответствует ли новое значение вашим условиям - если нет - вы восстанавливаете старое значение объекта (если вам нужно) и генерируете исключение.
  • в шаблоне управления, который используется для отображения недопустимого значения в элементе управления, вы можете получить доступ к сообщению об ошибке и отображать сообщение об исключении.

трюк здесь, это привязка только к объектам, которые происходят из DependencyObject. простая реализация INotifyPropertyChanged не сработает - в структуре есть ошибка, которая препятствует доступу к сбору ошибок.

Ответ 4

Также проверьте эту статью. Предположительно Microsoft выпустила свою Enterprise Library (v4.0) из своих шаблонов и практик, где они охватывают тему проверки, но бог знает, почему они не включая проверку подлинности для WPF, так что сообщение в блоге, на которое я направляю вас, объясняет, что автор сделал для его адаптации. Надеюсь, это поможет!

Ответ 5

Вам может быть интересно приложение BookLibrary приложения WPF Application Framework (WAF). Он показывает, как использовать проверку в WPF и как управлять кнопкой "Сохранить", когда существуют ошибки проверки.

Ответ 6

Если ваш бизнес-класс напрямую используется вашим пользовательским интерфейсом, предпочтительнее использовать IDataErrorInfo, поскольку он приближает логику к своему владельцу.

Если ваш бизнес-класс является классом заглушки, созданным ссылкой на службу WCF/XmlWeb, вы не можете/не должны использовать IDataErrorInfo или не использовать исключение для использования с ExceptionValidationRule. Вместо этого вы можете:

  • Используйте специальный ValidationRule.
  • Определите частичный класс в вашем проекте пользовательского интерфейса WPF и реализуйте IDataErrorInfo.