Может ли Validator.TryValidateObject заставить атрибуты [CustomValidation] проверять свойство? - PullRequest
0 голосов
/ 26 апреля 2011

Я украсил свойство класса с помощью CustomValidationAttribute, чтобы проверить, было ли установлено значение GUID, но когда я пытаюсь принудительно выполнить его с помощью вспомогательного метода Validator.TryValidateObject () , кажется, что это не вызывает мою логику проверки.

Логика проверки запускается, когда значение оформленного свойства изменилось, но мне нужно обработать сценарий, в котором пользователь нажимает кнопку сохранения, не заполняя обязательные поля, поэтому необходимо принудительно запускать атрибуты проверки перед вызов DomainContext.SubmitChanges () вызывается.

Интересно, что даже классы, которые наследуются от ValidationAtrribute, не выполняются Validator.TryValidateObject ().

Как правильно заставить атрибуты проверки выполняться?

Ответы [ 2 ]

1 голос
/ 17 ноября 2011

Более простой способ сделать это - установить последний параметр (validateAllProperties) в TryValidateObject () в значение true. См. MSDN статьи для получения дополнительной информации.

List<ValidationResult> vr = new List<ValidationResult>();
ValidationContext vc = new ValidationContext(viewModel, null, null);
Validator.TryValidateObject(viewModel, vc, vr, true);
1 голос
/ 26 апреля 2011

Пользовательские валидаторы, применяемые на уровне свойств, должны проверяться отдельно с помощью TryValidateProperty.

, например

Validator.TryValidateProperty(ViewModel.MyProperty,
                new ValidationContext(ViewModel.MyProperty, null, null) 
                { MemberName = "MyProperty" }, results); 
...