У меня очень простое приложение WPF, в котором я использую привязку данных, чтобы разрешить редактирование некоторых настраиваемых объектов CLR. Теперь я хочу добавить некоторую проверку ввода, когда пользователь нажимает кнопку «Сохранить». Однако все книги WPF, которые я прочитал, на самом деле не посвящают этому вопросу места. Я вижу, что вы можете создавать собственные ValidationRules, но мне интересно, будет ли это излишним для моих нужд.
Итак, у меня такой вопрос: есть ли где-нибудь хороший образец приложения или статьи, демонстрирующие передовой опыт проверки пользовательского ввода в WPF?
.net
wpf
data-binding
validation
Марк Хит
источник
источник
Из документации MS Patterns & Practices :
В документации объясняется, как реализовать IDataErrorInfo и INotifyDataErrorInfo.
источник
лично я использую исключения для обработки проверки. это требует следующих шагов:
уловка здесь заключается в том, чтобы привязать только к объектам, которые являются производными от DependencyObject. простая реализация INotifyPropertyChanged не сработает - в структуре есть ошибка, которая не позволяет вам получить доступ к коллекции ошибок.
источник
Также проверьте эту статью . Предположительно Microsoft выпустила свою корпоративную библиотеку (v4.0) из своих шаблонов и практик, в которых они охватывают тему проверки, но бог знает, почему они не включили проверку для WPF, поэтому сообщение в блоге, к которому я вас направляю, объясняет, что автор сделал, чтобы адаптировать его. Надеюсь это поможет!
источник
Возможно, вас заинтересует пример приложения BookLibrary из WPF Application Framework (WAF) . В нем показано, как использовать проверку в WPF и как управлять кнопкой «Сохранить» при наличии ошибок проверки.
источник
Если ваш бизнес-класс напрямую используется вашим пользовательским интерфейсом, предпочтительнее использовать IDataErrorInfo, потому что это приближает логику к их владельцу.
Если ваш бизнес-класс является классом-заглушкой, созданным ссылкой на службу WCF / XmlWeb, вы не можете / не должны использовать IDataErrorInfo или генерировать исключение для использования с ExceptionValidationRule. Вместо этого вы можете:
источник