Блок приложения проверки 5 и модель представления WPF

Мой вопрос довольно простой и связан с проверкой объекта в вашей модели представления с использованием блока приложения 5.0 проверки корпоративной библиотеки.

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

Это проблема, так как я хотел вызвать такой код

ValidatorFactory factory = EnterpriseLibraryContainer.Current.GetInstance<ValidatorFactory>();
myValidator = factory.CreateValidator<Customer>();

ValidationResults results = myValidator.Validate(this.CustomerProperty);
if (!results.IsValid)
{
    // etc
}

в моей команде кнопки сохранения в модели представления, чтобы проверить правильность данных.

Пример проблемы, с которой я столкнулся.

например Если у меня есть текстовое поле, привязанное к свойству строки в виртуальной машине с помощью валидатора длины строки (минимальная длина 1, максимальная 10), тогда может произойти следующее;

  1. Введите текст "ABC". Пользовательский интерфейс не показывает ошибку. Свойство модели просмотра обновлено до "ABC".
  2. Удалить содержимое текстового поля (теперь недействительно). Пользовательский интерфейс теперь показывает ошибку (хорошо). Но свойство модели представления теперь не синхронизировано с пользовательским интерфейсом. Свойство в модели представления по-прежнему установлено на ABC.
  3. Проверка сохранения по-прежнему будет проходить, поскольку данные модели представления еще действительны.

Как мне это делать?


person obaylis    schedule 05.05.2011    source источник


Ответы (1)


Чтобы решить эту проблему, я удалил validationRule (согласно примеру в документации практических лабораторных работ EntLib 5) и реализовал IDataErrorInfo в своем классе Customer.

Затем я изменил свой XAML и добавил привязку текстового поля

ValidatesOnDataErrors=True

Затем это подтверждает мой объект, как я и ожидал. т.е. недействительные данные распространяются на свойство модели представления, которое я затем могу проверить с помощью моей команды сохранения.

person obaylis    schedule 07.07.2011