我有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
方法中设置断点,则可能会发现它实际上是在加载时触发的。
我怀疑你的验证器返回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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句