ValidatesOnDataError используется для проверки бизнес-правил в отношении ваших моделей представления и будет проверяться только в случае успешного выполнения привязки.
ValidatesOnExceptions необходимо применять вместе с ValidatesOnDataError для обработки тех сценариев, где wpf не может выполнить привязку из-за несоответствия типа данных, скажем, вы хотите привязать TextBox к свойству Age (целое число) в вашей модели представления
<TextBox Text="{Binding Age, ValidatesOnDataErrors=true, UpdateSourceTrigger=PropertyChanged}" />
Если пользователь вводит недопустимую запись, вводя алфавиты, а не цифры в качестве возраста, скажем, xyz, привязка данных wpf молча игнорирует значение, поскольку не может привязать xyz к Age, и ошибка привязки будет потеряна, если привязка не украшена ValidatesOnExceptions
<TextBox Text="{Binding Age, ValidatesOnDataErrors=true, ValidatesOnExceptions="True", UpdateSourceTrigger=PropertyChanged}" />
ValidatesOnException использует обработку исключений по умолчанию для ошибок привязки с помощью ExceptionValidationRule, приведенный выше синтаксис представляет собой краткую форму для следующего
<TextBox>
<TextBox.Text>
<Binding Path="Age" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="True">
<Binding.ValidationRules>
<ExceptionValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
Вы можете определить свои собственные правила для проверки ввода пользователя, производные от ValidationRule и реализовав метод Validate, NumericRule в следующем примере.
<TextBox.Text>
<Binding Path="Age" ValidatesOnDataErrors="True">
<Binding.ValidationRules>
<rules:NumericRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
Правила проверки должны быть общими и не привязанными к бизнесу, поскольку последнее выполняется с помощью IDataErrorInfo и ValidatesOnDataError.
Приведенный выше синтаксис довольно запутан по сравнению с синтаксисом привязки одной строки, который у нас есть, путем реализации ValidationRule в качестве прикрепленного свойства синтаксис можно улучшить, и вы можете взглянуть на него здесь
person
skjagini
schedule
24.11.2010