Проверка WPF - ValidatesOnTargetUpdated - PullRequest
3 голосов
/ 09 мая 2011

У меня есть несколько текстовых полей в приложении WPF, для которых я настроил некоторую проверку.

При загрузке приложение десериализует класс, к которому привязаны элементы управления окна WPF.

У меня есть ValidationRule, который (например) проверяет, существует ли файл. Если я не установлю ValidatesOnTargetUpdated, то соответствующий TextBox проверяется, когда я изменяю (привязанное) текстовое свойство, и я вижу красную рамку (по умолчанию) и подсказку ({Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors).CurrentItem.ErrorContent}), отображающую сообщение об ошибке.

Я хочу, чтобы элементы управления проверяли привязку, а не измененную собственность, поэтому я установил для ValidatesOnTargetUpdated значение true и могу видеть срабатывание validationRule при отладке.

Моя проблема в том, что (по умолчанию) шаблон ValidationTemplate игнорируется, когда ValidatesOnTargetUpdated="True" несмотря на срабатывание ValidationRule.

Я вижу подсказку - она ​​отображается с правильным сообщением об ошибке, но граница не отображается красным; это, кажется, игнорируется.

Есть идеи, почему это происходит?

1 Ответ

2 голосов
/ 09 мая 2011

Вы можете прочитать это сообщение на форуме .Я полагаю, что часть, относящаяся к вашей ситуации:

Проблема: шаблон ошибки не отображается при загрузке страницы

Это сделано специально,поскольку можно предположить, что пользователь не хочет видеть сообщения об ошибках до того, как он / она допустит какие-либо ошибки, но иногда это необходимо.Итак, свойство ValidatesOnTargetUpdated было введено в классе ValidationRule;установив его в true, можно сразу увидеть результат проверки.Однако есть одно предостережение: вы должны убедиться, что вы установили DataContext после инициализации страницы;это может быть либо в конструкторе после сгенерированной строки комментария, в которой говорится, что код инициализации должен идти туда, либо в событии Loaded.Если вы хотите установить DataContext в XAML, вы найдете решение этой проблемы здесь: http://wpfglue.wordpress.com/2009/12/08/navigating-from-object-to-object/

Однако я слышал, что это будет исправлено в WPF 4.0.

РЕДАКТИРОВАТЬ:

Более постоянную ссылку можно найти здесь .

...