中の技術日誌ブログ

C#とC++/CLIと
VBと.NETとWindowsで戯れる
 

目次

Blog 利用状況

ニュース

自己紹介

東京でソフトウェアエンジニアをやっています。
お仕事大募集中です。
記事執筆や、講師依頼とかでも何でもどうぞ(*^_^*)
似顔絵 MSMVPロゴ
MSMVP Visual C# Since 2004/04-2013/03

記事カテゴリ

書庫

日記カテゴリ

00-整理

01-MSMVP

Validationを通らないとデータソースに反映されない件について

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)を用意していたというのが以下の図です。

image

1を入力したときには反映されますが、Aを入力すると反映されません。

データソース側には1が取り残されます。

これをできるだけ従来モデルのようにするには、

  • データソースはすべて文字列にする
  • ValidationRuleは使わない
  • ボタン処理ですべてチェックする

このような対応を行うことになってしまいますが、折角のErrorTemplateもおじゃんです。

またConverterで補正を掛けることができないという問題があります。

100以上は100として、正常とする。マイナス値はエラーとする。

このようなパターンです。

上記のblogの方はConverterを読んでからVRを読んでほしいということになっていますが、そういう順序になればすべて解決するのですが、既存のアプリケーションには致命的な打撃を受けてしまいます。

こまったものですなぁ。このデザイン。

投稿日時 : 2007年11月5日 1:07

コメントを追加

# re: Validationを通らないとデータソースに反映されない件について 2007/11/05 4:05 えムナウ

Validation.ErrorEvent 添付フィールドで Validation.Error 添付イベントを発生させて、
BindingExpression.UpdateTarget で元データを反映させるパターンでしょうか。

# re: Validationを通らないとデータソースに反映されない件について 2007/11/05 4:25 えムナウ

>100以上は100として、正常とする
0以上はValidationRuleで正しいとしてConverterで補正をかければいいんじゃないでしょうか。
TargetのPropertyChangedでSourceに100と表示されると思います。

エラーにしたままでも Validation.Error 添付イベントでエラー原因から、直接Converterを呼んで解決できます。

Validation.Error 添付イベントは、Binding.NotifyOnValidationError プロパティも注意が必要です。

DependencyProperty.UnsetValue が返された場合、
ターゲット プロパティは FallbackValue を使います。
FallbackValue がない場合は既定値です。
FallbackValue に100を置いておく方法もあります。
PriorityConverterを使ってもいいですね。

タイトル
名前
URL
コメント