Как мы можем показать пользовательские Предупреждения похожим способом к Ошибкам. Единственная разница - то, что управление, например, TextBox должен иметь другой ошибочный шаблон и подобный Проверке. HasError там должна быть Проверка. HasWarning.
Другими словами, не всеми проблемами проверки являются "ошибки" (в нашем приложении, по крайней мере). Мы хотим визуально указать, является ли что-то предупреждением или ошибкой.
Иногда мне нужна золотая середина. Подобно командам
, которым требуются 3 значения из CanExecute
, а не true
или false
.
Что касается предупреждений, которые действуют как проверка, я не знаю всех частей, которые нужно было бы собрать, но я думаю, что знаю, с чего начать.
Вам нужно будет полагаться на присоединенные свойства и присоединенные поведения (присоединенные свойства, которые подписываются на события объекта и выполняют операции, связанные с этими событиями, когда они запускаются). У вас может быть один, который управляет коллекцией объектов ValidationRule
, чтобы определять, выдается ли предупреждение или нет, подобно свойствам Validation
. У вас может быть один под названием HasWarning
, который устанавливается или сбрасывается при проверке, на которую можно ссылаться в триггерах стиля / шаблона.
Вы можете сделать отображение предупреждения частью каждого шаблона элемента управления, или вы можете снова имитировать Validation
и иметь прикрепленное свойство WarningTemplate
, которое используется для размещения предупреждающей информации в AdornerLayer
.
Поскольку пользовательские объекты ValidationRule
возвращают объект ValidationResult
, в котором ErrorContent
является просто объектом, и этот объект также отображается в ValidationError
объекты как ErrorContent
, вы также можете в конце концов использовать обычную проверку.Вы могли бы использовать класс в качестве объекта ErrorContent
, который имеет свойство ErrorType
предупреждения или Error и привязать его к вашему ErrorTemplate
.
Я не уверен, что наличие ошибки ValidationError
предотвратит определенные операции (например, нажатие кнопок), которые вы хотели бы разрешить, но можно было бы создать какой-то прокси на ViewModel, который оценивает Тип ошибки
.