WPF ValidationRule Проверка при загрузке элемента управления - PullRequest
8 голосов
/ 15 апреля 2010

У меня есть контроль с этой проверкой

<MyPicker.SelectedItem>
 <Binding Path="Person.Value" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" NotifyOnValidationError="True">
  <Binding.ValidationRules>
   <rules:MyValidationRule ValidationType="notnull"/>
  </Binding.ValidationRules>
 </Binding>
</MyPicker.SelectedItem>

Это класс проверки:

class MyValidationRule : ValidationRule
{        
 private string _validationType;
 public string ValidationType
 {
  get { return _validationType; }
  set { _validationType = value;  }
 }

 public override ValidationResult Validate(object value, CultureInfo cultureInfo)
 {            
  ValidationResult trueResult = new ValidationResult(true, null);

  switch (_validationType.ToLower())
  {
   case "notnull": return value == null ? new ValidationResult(false, "EMPTY FIELD") : trueResult;               
   default: return trueResult;
  }
 }
}

Вопрос: при изменении свойства вызывается метод Validate (), который является правильным.

Но чтобы вызвать этот метод в самом начале , когда MyControl создан ? Мне нужно доказать немедленный после инициализации, если в элементе управления есть нулевое значение (и отображать ошибку проверки)

Ответы [ 2 ]

18 голосов
/ 15 апреля 2010

ОК, я решил это: Вы запускаете проверку, когда элемент связывается с простым свойством - ValidatesOnTargetUpdated:

 <rules:MyValidationRule ValidatesOnTargetUpdated="True"  ValidationType="notnull"/>
2 голосов
/ 23 июля 2013

Ваш ответ великолепен ... Я просто хочу сказать это.

У меня так много элементов управления для проверки и так много правил, поэтому я создал конструктор в своем классе validationRule и установил для ValidatesOnTargetUpdated значение True.

Таким образом, мне не нужно просматривать все мои страницы и элементы управления, чтобы добавить это свойство в правило проверки.

1007 * из базы подписки *

public class MyRule : ValidationRule
{
   public MyRule() : base() { ValidatesOnTargetUpdated = true; }
   ...
}

public class MyRule2 : MyRule 
{
   public MyRule2() : base() { }
   ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...