SourceChordスマートフォン用の表示で見るSourceChordC#とXAML好きなプログラマの備忘録。最近はWPF系の話題が中心です。WPF久しぶりに、WPFのバリデーション・ネタです。以前、DataAnnotationsの機能を使って、プロパティの属性としてバリデーションの条件を記述する方法を書きました。SourceChordこのバリデーションの条件として、カスタムのロジックを作成する方法についてまとめてみました。以下の二つの方法を扱っています。使い分けとしては、汎用的に使いまわしそうな検証ロジックはValidationAttribute派生で作り、特定のクラス用に特化したロジックなどはCustomValidationAttributeを用いる、というのが相性が良いように思います。ValidationAttribute派生クラスを作成まずはValidationAttribute派生のクラスの作り方です。string型のプロパティに対し、もしプロパティの値が空白(IsNullOrWhiteSpaceの戻り値がtrue)だったらエラー、という動作のバリデーション用属性を作ってみます。そもそも、string型のプロパティに対するバリデーションであれば、RegularExpressionAttributeが非常に汎用的に利用できるので、このような派生クラスを実際に自分で作ることはないとは思います。ここでは練習として、こんな感じの手抜きのバリデーション用クラスを作ってみます。string型のプロパティ値が空白だった場合に、以下のようにメッセージを表示するだけのシンプルなものです。手順はとてもシンプルで、以下2点をするだけです。ValidationAttribute派生のクラスを作りIsValidメソッドをオーバーライドする。このIsValidメソッドですが、2種類のオーバーロードがあるので、ここではそのそれぞれの方法を試してみます。value)をオーバーライド引数で渡ってきたvalue値をチェックし、検証結果をbool値で返すだけのシンプルなものです。}使い方はこんな感じ。プロパティに属性を付けるときに、コンストラクタの名前付き引数でErrorMessage引数に与えた文字列を、エラー発生時の表示用文字列とすることができます。validationContext)をオーバーライド次は、二つの引数を持つIsValidメソッドをオーバーライドしてみます。こちらでは、validationContextが引数にわたってくるので、バリデーション対象のオブジェクトの情報なども見ることができます。このサンプルでは特に使用しません。こちらをオーバーライドする場合には、メソッドの戻り値をboolではなく、ValidationResult型で返す点に注意が必要です。}ここでは、ValidationResultのインスタンスを生成する時に、ErrorMessageプロパティを参照して、エラー発生時の表示用文字列としています。CustomValidateion属性を利用CustomValidationAttributeクラスを使うと、任意のstaticメソッドを用いたバリデーションが行えます。以下のようなstaticメソッドを、ViewModelクラスに作り、バリデーション対象のプロパティのCustomValidation属性で、このメソッドを指定します。}ValidationResultのインスタンスを作るときの引数をnullにしておくと、エラー時の表示文字列として、属性のErrorMessageプロパティを使ってくれるようになります。↓属性の設定側はこんな感じ。}全サンプルコード今回のサンプルのすべてのコードは以下の通りです。~エラー表示のローカライズ~ずいぶん久しぶりだけど、WPFの入力値検証ネタ。~ErrorsContainerの使い方~↓の続きです。アプリ開発Windows開発者はてなブログをはじめよう!minami_SCさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。