Я собираюсь разработать простую структуру проверки для WPF (метод IDataErrorInfo не предоставляет достаточно информации для моих нужд), и мне интересно, есть ли способ получить уведомление, когда свойство будет проверяться? Обратите внимание, что мне нужно знать в любое время, когда он будет пытаться проверить, а не только при возникновении ошибки (поэтому NotifyOnValidationError не сокращает его)
В качестве альтернативы, моя конечная цель - просто упаковать больше информации, чем просто строку с ошибкой, в мои проверки (насколько критична ошибка, ссылки для получения дополнительной информации и т. д.), При этом позволяя проверять проверку с помощью объекта данных (стиль IDataErrorInfo) . Если кто-нибудь может указать мне способ сделать это, я тоже буду счастлив. :)





Проблема, с которой вы столкнетесь, заключается в том, что привязка данных и проверка WPF привязаны к интерфейсу IDataErrorInfo. Привязки проверяют правильность на основе свойства привязки UpdateSourceTrigger. Итак, если ваша привязка имеет «UpdateSourceTrigger = PropertyChanged», то каждый раз, когда свойство изменяется, он вызывает элемент [«MyProperty»], в который вы должны вернуть информацию о том, действительно ли ваше свойство. Если для него установлено значение «LostFocus», тогда он проверяет всякий раз, когда элемент управления теряет фокус. Для привязки также требуется «ValidatesOnDataErrors = True», чтобы принудительно выполнить проверку привязанного объекта.
Я думаю, что лучше всего было бы создать класс, реализующий IDataErrorInfo, а затем предоставить более подробную информацию в зависимости от серьезности ошибки.
Контекстом данных шаблона ошибки должен быть ваш объект, реализующий ваш интерфейс. Вы можете просто привязать его, например {Binding SeverityLevel}
Вам нужно изучить наследование от ValidationRule, а затем добавить новое правило ко всем связывающим объектам.
Я тоже смотрел на это, но обнаружил, что правила проверки болезненно ограничены. У вас нет никакого способа получить доступ ни к чему, кроме связанного значения, которое не работает, если проверка основана на других элементах вашего объекта. Есть предложения, как это обойти?
Хорошо, поиграв с ним еще несколько дней, я начинаю думать, что это лучший ответ, который я получу. Однако есть еще один вопрос: допустим, я создаю свой собственный интерфейс, который расширяет IDataErrorInfo, чтобы получить, скажем, уровень серьезности для свойства. Как получить доступ к этому в шаблоне ошибки?