ユーザコントロールを作っていて、そのコントロールの中にエラーが存在するかをこのコントロール使う側から簡単にわかるようにしたいです。
ユーザコントロールの中には 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 自体にこのインターフェースを実装すればあとはフレームワークが勝手にしてくれるものでしょうか?(依存プロパティが内部でどう処理されているかはあまり把握できていません。)
2. TextBox ではどのような仕組みで Validation.GetHasError
でエラーのありなしを取得できるようにエラーを伝えているのでしょうか?
3. そもそも UserControl 全体でどこかにエラーを含むかの確認をする方法に Validation.GetHasError
を使うのは最近の方法として良いものでしょうか?
の3つです。
以上よろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/09 14:40