基于此示例
http://msdn.microsoft.com/en-us/library/system.windows.data.binding.validatesonexceptions.aspx
似乎ValidatesOnExceptions负责捕获自定义异常并将其添加到Validation.Errors集合。
问题是即使将ValidatesOnExceptions设置为false,我也有相同的行为
有人能解释我错过了什么吗?
由于
答案 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 :(得分: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的行为