0

WPF/MVVM でのデータ検証への満足のいくアプローチを見つけるのに苦労しています。私は使用してきましたがIDataErrorInfo、テキストボックスを(たとえば)プロパティにバインドし、int数値以外の値を入力すると、WPF は独自の検証メッセージを生成します(「値 'xyz' を変換できませんでした」)。コントロールはエラーとして強調表示されますが、バインディング (したがって IDataErrorInfo 検証) が発生しなかったため、viewmodel はプロパティが無効な状態であることを認識していません。

カスタムバリデーターについてはまだ調べていません。これらを使用して、ビューモデルにエラーがあることを通知できますか? 複雑なアプリケーションが必要とする多くのルールのそれぞれに対してバリデータークラスを作成するのは過剰に思えるので、それらを使用するのは少し気が進まない. 入力が数値であることを保証する基本的なカスタム バリデータと、より複雑なものには IDataErrorInfo という 2 つのアプローチを組み合わせて使用​​することもできます。

また、IDataErrorInfo を使用して「関連する」プロパティを検証するのにも苦労しています。私のモデルには「最小」と「最大」のプロパティがあり、最小が最大よりも小さいことを確認したいとします。「最小」テキストボックスを最大より大きい値に変更すると、コントロールは無効として正しくマークされます。「最大」を「最小」より大きい値に変更すると、「最小」テキストボックスの検証状態がクリアされません (おそらく「最小」が変更されていないため、再度検証されないためです)。この状況に最適なアプローチは何ですか?

他の人がどのように WPF 検証に取り組んだか知りたいです。.Net 4.5 での WPF 検証の改善点はありますか?

4

1 に答える 1

1

これを認識していると思われますが、型が一致しない (または変換できない) 場合は set が呼び出されることさえありません。

Int にバインドされた空の TextBox でこの問題が発生しましたか? TextBox が null ではなく String.Empty を渡していたためです。そのため、コンバーターを使用して String.Empty を null に変換しました。

TextBox はテキストを受け入れます。それを回避する方法はありません。

すべてがセットに到達するように、文字列にバインドできます。

または、UI で keydown イベントを処理し、数値のみを許可して Int にバインドすることもできます。次に、検証で値が範囲内にあるかどうかを判断します。

于 2012-08-21T15:08:22.977 に答える