2010-12-01 16 views
1

私は解決できないようですWPFでの検証に問題があります。私は同じようなので、プロパティを使用するクラス(つまり、IDataErrorInfoを実装)を持っています。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> 

ValidateInputRow()関数が正常に通過し、私のカスタム検証ルーチンを実行するとのStackPanelでコンボボックスとテキストボックスが赤い枠を持っている以上の言及ようにエラーを適切に設定します。テキストボックス(例: "Abc")に数字以外の文字列を置くまでは、すべて正常に機能します。

文字列入力では、バインディングはデフォルトの検証を実行し、FormatExceptionが発生し、いつもこれで私の問題は私のクラスのプロパティのセッターが呼び出されることはありませんので、私のカスタム検証ルーチンが実行されることはありませんということです。

なぜこれが起こっているのか理解していますが、誰かがイベントをキャッチする方法を知っているのか、違反しているFormatExceptionが原因で私のカスタム検証が実行できるのでしょうか。私はこれを理解することができない。私は自分の質問に答えのようにOK

答えて

1

は、見えます。私はさらにFormatExceptionスタックトレースに見て、「IValueConverter」がプロセスに関与していることがわかったので.....ソリューションはそうのようなコンバータを使用することです。私の場合は

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

私は1つだけホイップ(TestConverter)を素早く実行し、それを私のカスタム検証ルールに結びつけました。問題が解決しました。問題と同等の解決策があるのだろうか?

関連する問題