Wpf ValidatesOnExceptions如何工作

Wpf ValidatesOnExceptions如何工作,wpf,validation,Wpf,Validation,基于这个例子 ValidatesOnExceptions似乎负责捕获自定义异常并将其添加到Validation.Errors集合 问题是即使ValidatesOnExceptions设置为false,我也有相同的行为 有人能解释一下我遗漏了什么吗 谢谢验证异常用于自定义异常显示。但是,如果将TextBox绑定到int属性,则在绑定发生之前会发生转换,这可能会导致“红色边框” 试一试 <TextBox Text="{Binding IntField}"/> <TextBox T

基于这个例子

ValidatesOnExceptions似乎负责捕获自定义异常并将其添加到Validation.Errors集合

问题是即使ValidatesOnExceptions设置为false,我也有相同的行为

有人能解释一下我遗漏了什么吗


谢谢

验证异常
用于自定义异常显示。但是,如果将
TextBox
绑定到
int
属性,则在绑定发生之前会发生转换,这可能会导致“红色边框”

试一试

<TextBox Text="{Binding IntField}"/>
<TextBox Text="{Binding StringField, ValidatesOnExceptions=False}"/>
<TextBox Text="{Binding StringField, ValidatesOnExceptions=True}"/>

public int IntField { get; set; }

private string stringField;
public string StringField
{
    get { return stringField; }
    set
    {
        throw new Exception();  text = stringField; }
    }
}

公共整型整型字段{get;set;}
私有字符串字符串字段;
公共字符串字符串字段
{
获取{return stringField;}
设置
{
抛出新异常();text=stringField;}
}
}
在每个文本框中键入一个数字:

  • 红色边框,因为数据转换
  • 没有红色边框,因为EvalidatesOnExceptions错误
  • 红色边框,因为验证了Nexceptions 真的

  • 我希望能有所帮助。

    这取决于您使用的框架版本

    在.NET4和4.5中,nemesv的答案是正确的。但它与MSDN文档不同

    在.NET 3.5中,当引入
    ValidatesOnExceptions
    时,当数据转换失败时,没有默认的“红色边界”。如果您想拥有该功能,则需要将
    例外验证规则
    显式添加到
    绑定的
    验证规则
    中。上面说,如果您想要一个速记,您可以简单地将
    validationExceptions
    设置为
    true


    问题是4.0版和4.5版中的文档是错误的,因为它提到了.NET 3.5的行为

    是的,你写的东西是有效的,我不明白,但我做的很好,我总是得到红色边框,唯一不同的是我在DataGridTemplateColumn中使用了文本框。也许我做错了什么,谢谢