我有一个WPF验证问题,我似乎无法解决。我有一个类(它实现了IDataErrorInfo),它使用了像-so这样的属性。WPF绑定和验证
private double? _SizeSearchValue;
public double? SizeSearchValue
{
get { return _SizeSearchValue; }
set
{
_SizeSearchValue = value;
NotifyChange("SizeSearchValue");
ValidateInputRow("SizeSearchValue");
}
}
它被绑定到这样的XAML中的文本框。
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" Text="Size:"/>
<ComboBox Text="{Binding SizeSearchOption, ValidatesOnDataErrors=True}"/>
<TextBox Text="{Binding SizeSearchValue, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged, ValidatesOnExceptions=False}"/>
</StackPanel>
在属性setter通常会经历和运行我的自定义验证程序,并适当设置错误,以便在StackPanel中的组合框和文本框上面提到的ValidateInputRow()函数有一个红色的边框。一切正常,直到我将一个非数字字符串放入文本框(例如,“Abc”)。
使用字符串输入绑定运行其默认验证,引发FormatException并且文本框获取其红色边框通常。我的问题是,我的自定义验证例程永远不会运行,因为我的类中的属性setter从未被调用过。
我明白为什么会发生这种情况,但我想知道是否有人知道一种方法来捕获一个事件,或有问题的FormatException,以便我可以在事实之后运行自定义验证。我似乎无法弄清楚这一点。