我有一个使用此验证的控件
<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时在最开始调用此方法?如果控件中有空值(并显示验证错误),我需要在初始化后证明立即
答案 0 :(得分:18)
好的我已经解决了:
当元素与简单属性绑定时强制进行验证 - ValidatesOnTargetUpdated
:
<rules:MyValidationRule ValidatesOnTargetUpdated="True" ValidationType="notnull"/>
答案 1 :(得分:2)
你的答案很棒......我只想说这个。
我有很多控件要验证和许多规则,所以我所做的是在validationRule类中创建一个构造函数,并在那里将ValidatesOnTargetUpdated设置为True。
这样我就不必遍历所有页面和控件来将此属性添加到验证规则中。
Examlpe
public class MyRule : ValidationRule
{
public MyRule() : base() { ValidatesOnTargetUpdated = true; }
...
}
public class MyRule2 : MyRule
{
public MyRule2() : base() { }
...
}