[英]WPF ValidationRules does not fire on load
我在文本框中有一个ValidationRules
;
<TextBox Margin="5,5,5,0" Name="myTextBox" >
<Binding Path="myID" NotifyOnValidationError="True" ValidatesOnDataErrors="True" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" >
<Binding.ValidationRules>
<local:ValueCannotBlankValidator ValidatesOnTargetUpdated="True" />
</Binding.ValidationRules>
</Binding>
现在,如果用户在文本框中更改值,则此方法有效。 它不会在加载时触发的问题。 认为这是将UpdateSourceTrigger="PropertyChanged"
更改为UpdateSourceTrigger="LostFocus"
的简单解决方案,但不会导致ValidationRules
触发。 谢谢您的帮助。
如果设置UpdateSourceTrigger="LostFocus"
,则在将输入焦点设置为另一个控件时进行验证,另一方面,每次更改文本时都会触发UpdateSourceTrigger="PropertyChanged"
,其行为与TextBox的TextChanged事件非常相似。
ValidatesOnTargetUpdated="True"
确保在加载时验证文本,您的XAML代码正确。 如果在ValueCannotBlankValidator.Validate
方法中设置一个断点, ValueCannotBlankValidator.Validate
可能会发现它实际上是在加载时触发的。
我怀疑您的验证器在第一次验证时是否返回valid
结果,那时TextBox的Text属性为null
,如果将null
与string.Empty ("")
进行比较,则会得到不正确的结果。
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
ValidationResult trueResult = new ValidationResult(true, "not blank");
string str = value as string; //value is null on load, don't compare it against ""
if (string.IsNullOrEmpty(str))
return new ValidationResult(false, "blank");
else
return trueResult;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.