Пользовательская проверка не выполняется - PullRequest
4 голосов
/ 22 августа 2011

У меня есть класс View Model в приложении WPF, который имеет очень сложную проверку. Я реализовал интерфейс IValidatableObject для обеспечения пользовательской логики проверки. Проблема в том, что мой IEnumerable<ValidationResult> Validate(ValidationContext validationContext) никогда не вызывается!

Вот код, пытающийся выполнить проверку: Validator.TryValidateObject(RMA, new ValidationContext(RMA, null, null), result);

Есть идеи, почему объект Validator не вызывает мой пользовательский код проверки?

1 Ответ

8 голосов
/ 23 августа 2011

Проблема заключалась в том, что у меня было [Required] в одном из полей пользовательского класса, и Validator не будет выполнять пользовательскую проверку, пока не будет завершена вся проверка аннотаций данных. Удаление [Required] позволяет выполнить пользовательскую проверку.

EDIT:

При проверке объекта в Validator применяется следующий процесс: ValidateObject:

  1. Проверка атрибутов уровня свойства
  2. Если какие-либо валидаторы недействительны, прервать валидацию, возвращая сбой (ы)
  3. Проверка атрибутов уровня объекта
  4. Если какие-либо валидаторы недействительны, прервать валидацию, возвращая ошибки (я)
  5. Если на десктопной платформе и объект реализует IValidatableObject, то вызвать его метод Validate и вернуть любой сбой (ы)

http://jeffhandley.com/archive/2009/10/16/validator.aspx

Проверка будет прервана на шаге № 2.

...