Рекомендации по связыванию и проверке данных WPF - PullRequest
100 голосов
/ 15 сентября 2008

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

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

Ответы [ 6 ]

83 голосов
/ 15 сентября 2008

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

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

23 голосов
/ 01 декабря 2010

Из документации MS Образцы и практики :

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

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

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

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

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

10 голосов
/ 16 сентября 2008

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

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

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

3 голосов
/ 16 сентября 2008

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

2 голосов
/ 04 июля 2010

Вас может заинтересовать BookLibrary пример приложения WPF Application Framework (WAF) . В нем показано, как использовать проверку в WPF и как управлять кнопкой «Сохранить» при наличии ошибок проверки.

0 голосов
/ 25 июля 2012

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

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

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