SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Silverlight 3徹底入門

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

Silverlight 3徹底入門(7)

  • X ポスト
  • このエントリーをはてなブックマークに追加

属性による値検証

 実は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の連載は次回で最終回になります。最後までよろしくお付き合いください。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Silverlight 3徹底入門連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5146 2010/05/10 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング