Блок 5 приложения проверки и модель представления WPF - PullRequest
0 голосов
/ 05 мая 2011

Мой вопрос довольно прост и касается проверки объекта в вашей модели представления с использованием блока 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. Проверка сохранения все равно пройдет, поскольку данные модели представления все еще действительны.

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

1 Ответ

0 голосов
/ 07 июля 2011

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

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

ValidatesOnDataErrors=True

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

...