私は多くのコントロールを持つMVVMベースのウィンドウを持っており、私のモデルはIDataErrorInfo
を実装しています。IDataErrorInfoを使用してViewModelからViewで検証エラーを強制的に更新するには?
また、プロパティを分析して検証を実行するSaveCommand
ボタンがあります。
ビューには、特定のコントロールの値を変更した場合、またはPropertyChangedを使用してそのプロパティの変更について通知する場合にのみ、エラーのコントロールの周囲のデフォルトの赤い境界線が表示されます。
コントロールに触れていなくても、すべての検証エラーを表示するにはどうすればよいですか?
すべての検証バインディングにはValidatesOnDataErrors=True, NotifyOnValidationError=True
が含まれています。
すべてのエラーを含む集約ボックスを用意することをお勧めしますが、コントロール単位でエラーを表示することをお勧めします。
ViewModelのバインドされたプロパティごとにModel.NotifyPropertyChanged
をトリガーしたくありません。
私はSilverlightではなくWPF 4.0を使用していますので、INotifyDataErrorInfo
は動作しません。
PropertyChangedのおかげで、ありがとう。私はそれが可能であることを知らなかった。私はこのトピックに関する別の議論を見つけました:http://stackoverflow.com/questions/1135012/wpf-mvvm-can-a-single-propertychanged-update-all-the-data-bindings-of-a-datate if誰でも興味があります。誰かが単一のシンプルなviewModelを持っている場合、これは良い答えです。しかし、私は複雑なビューを入れ子にしたViewModelを持っているので、INotifyPropertyChangedを実装している各ネストされたModel/ViewModelのPropertyChangedを一度呼び出すコードを書く必要があります – surfen
ビューの一部だけを更新したい場合は、特定のViewModelに移動します。 – surfen
myControl.GetBindingExpression(ControlType.ControlProperty).UpdateTarget();ソースプロパティを更新することなく、実際にあなたの検証を最新にします。 – r41n