ユーザコントロールを作っていて、そのコントロールの中にエラーが存在するかをこのコントロール使う側から簡単にわかるようにしたいです。
ユーザコントロールの中には TextBox や DataGrid などエラーが発生しうるものがあります。
TextBox の Text に int 型をバインドして文字を入れた時など、赤色の枠が出ていてエラーになってるかの判定では Validation.GetHasError を使うのだと思います。
Validation.GetHasError(this.textBox); では、赤色の枠があるときには true, 通常のエラーがないときは false を受け取れます。
コレと同じようにユーザコントロールで Validation.GetHasError(this.myControl); として内部にエラーがあれば true になるようにしたいです。
何もしない場合は、コントロール内の TextBox にエラーがあり、 Validation.GetHasError(this.myControl.textBox); が true となっていても、コントロール自体の Validation.GetHasError(this.myControl); は false になっています。
ぐぐってみたところ、 INotifyDataErrorInfo や IDataErrorInfo を使うというようなことを書いているページがありましたが、ユーザコントロールのトップレベルに対して Validataion.GetHasError する例は見当たりませんでした。
TextBox はこの仕組みを実装しているわけなので、参考にしようと ソース を見てみたのですが、INotifyDataErrorInfo や IDataErrorInfo を実装していなそうですし、代わりになる処理も見つけられませんでした。
長くなりましたが、質問は
INotifyDataErrorInfoなどを使うとしてユーザコントロール自体にエラーがあると見せるにはどうすればよいでしょうか?
よくサンプルに使われている ViewModel ではなく、UserControl 自体にこのインターフェースを実装すればあとはフレームワークが勝手にしてくれるものでしょうか?(依存プロパティが内部でどう処理されているかはあまり把握できていません。)- TextBox ではどのような仕組みで
Validation.GetHasErrorでエラーのありなしを取得できるようにエラーを伝えているのでしょうか? - そもそも UserControl 全体でどこかにエラーを含むかの確認をする方法に
Validation.GetHasErrorを使うのは最近の方法として良いものでしょうか?
の3つです。
以上よろしくお願いします。
2016/07/09 14:40