http://www.clariusconsulting.net/blogs/kzu/archive/2007/09/25/SeriousflawinWPFvalidationinfrastructureforValidationRuleandBinding.aspx
WPFネタですよと。
リンク先の人もこのモデルが理解できないようです。
UIレベルのチェックを行うためのValidationRuleがありますが、Validationが通らないとデータソースに反映はされません。
エラーになっているコントロールは視覚的に判断ができるようにErrorTemplateが適用されますが、そこまでです。
よくある業務パターンとして、登録ボタンを押したときにすべてのチェックを行うというパターンがあります。
Document-Viewアーキテクチャにしている場合にはドキュメントの中で論理的なチェックを行っていきますが、このDocumentの情報はViewと=ではありません。(コンバータが利いているとかそういうことではなく)
データソースがintの場合には数字しか反映させられません。
数字しか反映されないValidationRule(VR)と、Converter(Conv)を用意していたというのが以下の図です。
1を入力したときには反映されますが、Aを入力すると反映されません。
データソース側には1が取り残されます。
これをできるだけ従来モデルのようにするには、
- データソースはすべて文字列にする
- ValidationRuleは使わない
- ボタン処理ですべてチェックする
このような対応を行うことになってしまいますが、折角のErrorTemplateもおじゃんです。
またConverterで補正を掛けることができないという問題があります。
100以上は100として、正常とする。マイナス値はエラーとする。
このようなパターンです。
上記のblogの方はConverterを読んでからVRを読んでほしいということになっていますが、そういう順序になればすべて解決するのですが、既存のアプリケーションには致命的な打撃を受けてしまいます。
こまったものですなぁ。このデザイン。