Мне иногда нужна эта золотая середина. Например, Command
s, которым нужно 3 значения из CanExecute
, а не true
или false
.
Что касается предупреждений, которые действуют как валидация, я не знаю всех частей, которые нужно было бы собрать, но я думаю, что знаю, как начать.
Вы должны полагаться на вложенные свойства и присоединенные поведения (вложенные свойства, которые подписываются на события на объекте и выполняют операции, связанные с этими событиями, когда они запускаются). У вас может быть тот, который управляет коллекцией ValidationRule
объектов, которые можно использовать для определения того, выдается предупреждение или нет, так же, как это делают свойства Validation
. У вас может быть один с именем HasWarning
, который устанавливается или сбрасывается в результате проверки, на которую можно ссылаться в триггерах стиля / шаблона.
Вы можете сделать отображение предупреждения частью шаблона каждого элемента управления, или вы можете снова имитировать Validation
и иметь прикрепленное свойство WarningTemplate
, которое используется для размещения информации предупреждения в AdornerLayer
.
Поскольку пользовательские объекты ValidationRule
возвращают объект ValidationResult
, в котором ErrorContent
является просто объектом, и этот объект также отображается в объектах ValidationError
как ErrorContent
, вы также можете использовать регулярная проверка в конце концов. Возможно, вы могли бы использовать класс в качестве объекта ErrorContent
, который имеет свойство ErrorType
«Предупреждение» или «Ошибка», и привязать к нему в вашем ErrorTemplate
.
Я не уверен, что наличие ValidationError
помешает определенным операциям (таким как нажатие кнопок), которые вы хотели бы разрешить, но можно создать некоторый прокси на ViewModel, который оценит ErrorType
.