2010-12-01 81 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)真正快速並將其綁定到我的自定義驗證規則。問題解決了。我想知道這個問題是否有相同的解決方案?