ViewModelにバリデーションを組込む

MVVMに直接は関係ないかもしれないが、GUIアプリケーションを書く場合にはスマートなバリデーションは絶対に必要だ。

WindowsPhone7でのバリデーションは基本的には例外が投じられた際に発生するBindingValidationErrorイベントをコードビハインドなどで捕捉するしかないが、せっかくなのでSilverlight4で追加されたINotifyDataErrorInfoをWindowsPhone7でも使ってみることにする。ただし、これをただ使うだけではなく、もっとスマートな属性ベースのバリデータを使ったバリデーションを実装してみようと考えている。

属性ベースのバリデーションを実装しているのはSystem.ComponentModel.DataAnnotationsネームスペースだが、WindowsPhone7はこのネームスペース全体が省かれている。Java SDK "JSR 303 Bean Validation"をベースに全て自分で実装しても良いのだが、同ネームスペースはWindows Phone Toolkitでソースコードが公開されており、これらのコードはMicrosoft Public License (Ms-PL)が適用されており、その枠内であれば自由に使用できる。

Silverlight Toolkit - Download: Windows Phone Toolkit - August 2011 (7.1 SDK)
Microsoft シェアード ソース ライセンス

まずはこのコードを取込んでいろいろ試してみよう。