SOLUTIONモトスクウェアソリューションは、システム開発やイラスト制作などのIT関連業務を手掛ける個人事業です。情報技術に関することでお悩みのお客様は、どうぞお気軽にご相談ください!ホームRSSTwitterあいてぃーとふぼふWP7のバリデーション(基礎編)2011年05月18日カテゴリー:技術情報タグ:WindowsPhoneバリデーションとは入力値の検証処理のことです。ところで、WP7におけるバリデーションってどうするのが正しいのでしょうか╹ω╹)?標準の画面ではどうなってるの?ちょっと調べた限りだと、WP7のBindingクラスにもValidatesOnExceptionsやNotifyOnValidationErrorプロパティは存在しています。DataAnnotationsの検証属性やIDataErrorInfo、INotifyDataErrorInfoといったクラスは存在していません。́・ω・`)なので、WP7のMS謹製な画面でバリデーションが必要そうな項目を探してみたところ、メールアドレスを入力するテキストボックスにおいて、必須項目やアドレスの形式を判定してました!で、結論から申しますと上記の画面では、入力値が正しくない場合に画面内の入力内容を確定するボタンが押せなくなる仕様となっていました。このため、ユーザさんが不意にアドレスの形式を誤ってしまったとしても、なぜボタンが押せないのかを即座に理解することができません。(>ω<、)実装するとこんな感じ!ということで、WP7アプリでバリデーションを実施する場合、MVVMライクに行くならICommnadのCanExecuteメソッドで実施するのがよさそうですね。簡単なサンプルプログラムを作成してみました。このサンプルでは、テキストボックスに値が入力されていない場合にOKボタンが非活性状態となり、ついでにOKボタンを押下したときにメッセージボックスを表示する仕様とします。上段がView、下段がViewModelの実装例です。ICommnadのCanExecuteメソッドを利用すると、コントロールのIsEnabledプロパティなどを明示的に設定していなくても、CanExecuteメソッドの戻り値に応じてコントロールの活性状態を自動的に変更してくれますので便利です。ほかにも、MvvmLightのButtonBaseExtensionsクラスやPrismのIInteractionRequestを利用することにより、上記の仕様を簡潔に実装してみました。サンプルプログラム!詳細な内容は以下のサンプルプログラムをご覧ください。ValidationSampleちょっとまって!でも、実はこのサンプルプログラムにはちょっとした問題があります。実行してもらえればわかると思いますが、テキストボックスからロストフォーカスしたタイミングで検証が実行されるのです。テキストを変更してもそのタイミングでは検証処理が実行されない(ボタンの活性状態が変化しない)ため、テキストを空にしてもなんかOKボタンが押せそうな気になります(実際は押せませんが)。できれば1文字入力するごとにOKボタンの活性状態を変化させたいですよね。