首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF ValidationRules不会在加载时开火。

WPF ValidationRules不会在加载时开火。
EN

Stack Overflow用户
提问于 2014-09-29 20:36:37
回答 1查看 1K关注 0票数 0

我在文本框上有一个ValidationRules

代码语言:javascript
复制
<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>

现在,如果用户更改textbox中的值,则此操作有效。它没有在装载时发射的问题。认为这将是将UpdateSourceTrigger="PropertyChanged"更改为UpdateSourceTrigger="LostFocus"的简单修正,但这会导致ValidationRules不触发。谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-30 06:25:38

如果您设置了UpdateSourceTrigger="LostFocus",那么当将输入焦点设置为另一个控件时,验证就会发生;另一方面,每当文本被更改时,UpdateSourceTrigger="PropertyChanged"都会触发,这与TextBox的TextChanged事件非常相似。

ValidatesOnTargetUpdated="True"确保在加载时对文本进行验证,您的XAML代码是正确的。如果您在ValueCannotBlankValidator.Validate方法中设置了一个断点,您可能会发现它实际上是在加载时触发的。

我怀疑您的验证器在第一次验证时返回valid结果,此时TextBox的Text属性是null,如果您将nullstring.Empty ("")进行比较,则会得到不正确的结果。

代码语言:javascript
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26108425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档