CodeZine(コードジン)

特集ページ一覧

Silverlight 3で強化されたスタイルと値の検証

Silverlight 3徹底入門(7)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
目次

属性による値検証

 実はSilverlightにはこの例外を使った検証以外にいくつかの検証方法があるのですが、今回はおそらく今後主流になっていくであろうデータアノテーションを使った検証方法を紹介します。

 データアノテーションを使った検証を利用する場合は、まずプロジェクトにSystem.ComponentModel.DataAnnotationsアセンブリの参照を加えます。検証に利用する属性の多くはこのDataAnnotations名前空間に含まれます。表1に代表的な検証に利用できる属性を示します。これらの検証はASP.NETの検証コントロールとほぼ同じ意味を持つため、ASP.NET開発者はなじみが深いと思います。

表1 代表的なデータアノテーション
データアノテーション名 概要
RequiredAttribute 値が空でないか検証します
RangeAttribute 範囲内に値があるかを検証します
RegularExpressionAttribute 正規表現を使って値がパターンに合致しているか検証します
StringLengthAttribute 文字列の長さを検証します
CustomValidationAttribute カスタムコードを利用して値を検証します

 データアノテーションを利用して書き換えたバージョンをリスト9に示します。

[リスト9]データアノテーションを利用した値の検証(MainPage.xaml)
/// <summary>
/// 氏名
/// </summary>
/// <remarks>
/// 氏名は必ず入力され、40文字以内であること。
/// </remarks>
[Display(Name = "氏名", Description = "40文字以内で入力してください。")]
[Required(ErrorMessage = "氏名は必須入力です。")]
[StringLength(40, ErrorMessage = "氏名は40文字以内で入力してください。")]
public string UserName
{
  get { return _userName; }
  set
  {
  Validator.ValidateProperty(value, 
      new ValidationContext(this, null, null) { MemberName = "UserName"});
    _userName = value;
    OnPropertyChanged("UserName");
  }
}

private string _age;

/// <summary>
/// 年齢
/// </summary>
/// <remarks>
/// 年齢は必ず入力され、20以上の整数であること。
/// </remarks>
[Display(Name = "年齢", Description = "20歳以上150歳以内で入力してください。")]
[Required(ErrorMessage = "年齢は必須入力です。")]
[Range(typeof(int), "20", "150", ErrorMessage = "年齢は20歳以上を入力してください。")]
public string Age
{
  get { return _age; }
  set
  {
    Validator.ValidateProperty(value, 
        new ValidationContext(this, null, null) { MemberName = "Age"});
      _age = value;
      OnPropertyChanged("Age");
  }
}        

 検証の属性の指定自体は特に問題なく理解できると思います。ここでは各Setterの中で行っているこの部分について少し解説しておきます。

Validator.ValidateProperty(value, 
  new ValidationContext(this, null, null) { MemberName = "Age"});

 書き方は変わりましたが基本的にやっていることは、例外のコードとほぼ同じです。ValidatePropertyメソッドは第1引数に渡された値が、ValidationContextに指定されたプロパティに指定された検証属性にマッチしているかを検証し、不正なデータである場合はValidationExceptionの例外を投げているだけです。

 ValidationContextでは第1引数に検証対象のインスタンスを渡します。第2、第3引数はカスタム認証を利用する場合の認証サービスの取得とパラメータの受け渡しに利用します。

 また、検証対象がページのどの値かを指定するためにValidationContextのMemberNameプロパティに取得元のコントロール名を指定します。

まとめ

 今回はSilverlight 3で強力になったXAMLのスタイルと、業務アプリケーションの開発に欠かせない値の検証部分を中心に解説を行いました。両方ともそれほど派手な機能ではありませんが、便利な機能ではないでしょうか。Silverlight 4もリリースされましたが、Silverlight 3の連載は次回で最終回になります。最後までよろしくお付き合いください。



  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Silverlight 3徹底入門

もっと読む

著者プロフィール

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

  • WINGSプロジェクト かるあ (杉山 洋一)(カルア(スギヤマ ヨウイチ))

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5