SourceChordスマートフォン用の表示で見るSourceChordC#とXAML好きなプログラマの備忘録。最近はWPF系の話題が中心です。C#今まで何回かに分けて書いてきたWPFのバリデーション関係ネタについて、自分でもわりと見返すので、この入力値検証関連の記事をまとめておきます。あと、各種バリデーション方法のサンプルコード一式を、以下のリポジトリに上げておきました。書いたブログの記事とは微妙にリンクしていないサンプルですが・・・まぁ、この手のバリデーション処理を実装するときには、少しは役に立つのでは、、、と思います。SourceChord各種バリデーション方法の使い分け色々な方法を書いたけど、WPFでバリデーションをする場合は、基本的に以下2択のどっちかになるのでは、、、と思います。ValidationRuleを使って、View側でバリデーションINotifyDataErrorInfoを使って、VM側でバリデーションValidationRuleとINotifyDataErrorInfoの使い分けValidationRuleとINotifyDataErrorInfoの動作は、以下のような違いがあります。それぞれ、適材適所で使っていくのがいいのかな、と思います。自分は基本的にはINotifyDataErrorInfoを使うかなぁ、、って印象。ValidationRuleの動作ValidationRuleを使う場合は、現在UI上に入力されている値がVMに反映されるとは限りません。⇒バリデーションした結果、値が有効だった場合だけ、バインドしているVMのプロパティに反映されます。完全にView側で閉じたバリデーションをしておき、VMには常に有効な値しか入らない、という動作にしたい場合に向いています。ValidationRuleを使った方法は、VM側では処理を行わずにView側でデータを加工するようなイメージです。ValueConverterと似たような立ち位置でしょうか。INotifyDataErrorInfoを使った場合は、UIからバインドした値がバリデーションで無効な値、と判断される場合もその値がVM側プロパティにセットされます。(IDataErrorInfoも同様)そのため、UIに入力された値をバリデーション処理で判定した結果、エラーが起きているかどうかもVM側からチェックできるようになります。バリデーション処理自体をVMの単体テストとして行いたいような場合には、こちらの方が向いているかと思います。複数のプロパティが絡むような複雑なバリデーションも、こちらの方法の方が向くと思います。~独自の検証ロジックを作成する~久しぶりに、WPFのバリデーション・ネタです。~ErrorsContainerの使い方~↓の続きです。アプリ開発Windows開発者はてなブログをはじめよう!minami_SCさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。