Лучшие практики Привязки данных WPF и правил проверки достоверности

StackOverflow https://stackoverflow.com/questions/63646

Вопрос

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

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

Это было полезно?

Решение

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

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

Другие советы

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

Проверка данных и сообщение об ошибках

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

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

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

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

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

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

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

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

Возможно, вас заинтересует Книжная библиотека пример применения Платформа приложений WPF (WAF).В нем показано, как использовать проверку в WPF и как управлять кнопкой Сохранения при наличии ошибок проверки.

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

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

  • Используйте пользовательское правило проверки.
  • Определите частичный класс в вашем проекте пользовательского интерфейса WPF и реализуйте IDataErrorInfo.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top