私はMVVMを使用しており、IDataErrorInfoを使用してほとんどの検証を行っており、ViewModelには検証が必要な各メンバーの有効性をチェックするIsValidプロパティがあります。ただし、nullにできないintにバインドされたテキストボックスがいくつかあるため、ValidationRuleを使用して、そのフィールドを空白にした場合にユーザーに警告します(「値を変換できませんでした」よりもわかりやすいメッセージで)明らかにプロパティ セッターが呼び出されないため、IDataErrorInfo コードは呼び出されません。
問題は、検証エラーが発生した場合に無効にしたい [保存] ボタン (RelayCommand) があることです。したがって、そのコマンドの CanExecute は VM の IsValid プロパティをチェックします。しかし、明らかに、ユーザーが int フィールドを空白にすると、IDataErrorInfo はそれについて何も認識せず、現在ボタンは無効になりません。ViewModel がそのエラーを検出できる方法はありますか?
ここで解決策を見つけたと思いました http://wpfglue.wordpress.com/2009/12/03/forwarding-the-result-of-wpf-validation-in-mvvm/ しかし、それをC#に翻訳したので、できます動作するようにします (強制コールバックは呼び出されません)。私は依存関係のプロパティとオブジェクトをまだよく理解していません (WPF の非常に新しい)、このソリューションは複雑に見えます。
私が考えられる唯一のことは、検証ルールを取り除き、null 許容の int ラッパーを作成し、バインディングに TargetNullValue='' を配置してから、IDataErrorInfo コードで null をチェックすることです。もっと良い方法があれば、これをしないことをお勧めします。