2010-12-01 82 views
1

我有一个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,以便我可以在事实之后运行自定义验证。我似乎无法弄清楚这一点。

回答

1

好吧,看起来我回答了我自己的问题。我看着进一步向出现FormatException堆栈跟踪,发现一个“的IValueConverter”是参与这一过程,所以.....一个解决方案是使用像这样的转换器:

<TextBox Text="{Binding SizeSearchValue, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource TestConverter}}"/> 

在我来说,我只是一个鞭打(TestConverter)真正快速并将其绑定到我的自定义验证规则。问题解决了。我想知道这个问题是否有相同的解决方案?