ValidatesOnExptions如何工作

时间:2011-12-08 17:25:49

标签: wpf validation

基于此示例

http://msdn.microsoft.com/en-us/library/system.windows.data.binding.validatesonexceptions.aspx

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

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

有人能解释我错过了什么吗?

由于

2 个答案:

答案 0 :(得分:4)

ValidatesOnExceptions用于自定义异常显示。但是如果你有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; }
    }
}

为每个文本框键入一个数字:

  1. 因数据转换而出现红色边框
  2. 没有红色边框,因为VALidatesOnExceptions为false
  3. 红色边框,因为ValidatesOnExceptions 真
  4. 我希望它有所帮助。

答案 1 :(得分:3)

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

在.NET 4和4.5中,nemesv的答案是正确的。它仍然与MSDN文档不同。

在.NET 3.5中引入ValidatesOnExceptions时,DataConversion失败时没有默认的“red boarder”。如果您想要,则需要将ExceptionValidationRule明确添加到ValidationRules的{​​{1}}。 MSDN (3.5-4.5)表示,如果您想要一个简写,就可以将Binding设置为ValidatiosOnExceptions

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