LoginSignup
15
20

More than 5 years have passed since last update.

WPF/MVVM/C#/Prism5.0 エラー通知の少し便利な仕組み② -ValidationAttribute-

Last updated at Posted at 2015-03-16

ValidationAttribute

Prismとは直接関係がないのですが、PrismのErrorsContainerを利用すると少しだけ簡単にエラー通知の実装ができることをご紹介しました。
WPF/MVVM/C#/Prism5.0 エラー通知の少し便利な仕組み -ErrorsContainer-

その中で、ViewModelのプロパティの属性に付けられるValidationAttributeに様々な種類があることがわかりました。
MSDNでは以下のURLになります。
https://msdn.microsoft.com/ja-jp/library/system.componentmodel.dataannotations(v=vs.110).aspx

ValidationAttributeの種類と用途

簡単ですが、少し整理してみました。

用途分類1 用途分類2 クラス名 属性の指定の仕方(エラーメッセージ部分は適当です) 備考
数値 範囲指定 Range [Range(0, 1000, ErrorMessage = Value for {0} must be between {1} and {2}.")]"
文字数 最小のみ MinLength [MinLength(5, ErrorMessage = Value for {0} must be bigger {1}.")]"
最大のみ MaxLength [MaxLength(5, ErrorMessage = Value for {0} must be smaller {1}.")]"
範囲指定 StringLength [StringLength(10, MinimumLength = 5, ErrorMessage = Value for {0} must be between {1} and {2}.")]" コンストラクタにMaxを入れる。(わかりづらい・・・)
必須 Required [Required(ErrorMessage = {0} is required.")]"
文字形式 電話 Phone [Phone(ErrorMessage = Invalid Phone format.")]" フォーマット設定はできなそう。
Email EmailAddress [EmailAddress(ErrorMessage = Invalid Email Address")]" フォーマット設定はできなそう。
Url Url [Url(ErrorMessage = Invalid Url")]" フォーマット設定はできなそう。
ファイル拡張子 FileExtensions [FileExtensions( Extensions=".jpg,.xml,.xlsx", ErrorMessage = "Please specify a valid image file ({1})"]" Extensionsにカンマ区切りで文字列指定。
正規表現 なんでもあり RegularExpression [RegularExpression(@ここに正規表現記載", ErrorMessage = "Value for {0} must be XYZ.")]"
マルチバイトのみ RegularExpression [RegularExpression(@[^\x01-\x7E]+", ErrorMessage = "Value for {0} must be multi-byte-char or half-width kana.")]"
日時 日付のみ Range [Range(typeof(DateTime), "2011/1/1","2016/1/1", ErrorMessage = "Value for {0} must be between {1} and {2}.")]" Rangeにて、取りうる日付の範囲を決めてやれば流用できる。
日付+時間 Range [Range(typeof(DateTime), "2011/1/1 12:00:00","2016/1/1 03:00:00", ErrorMessage = "Value for {0} must be between {1} and {2}.")]" Rangeにて、取りうる日時の範囲を決めてやれば流用できる。

数値かどうか、はRangeを利用したほうが良さそうですね。
他にも様々ありましたが、基本はRegularExpressionとRangeの応用でほとんどのチェックは出来そうです。

サンプルコードをGitHubに挙げてあります。
[https://github.com/Koki-Shimizu/NValidationSample]

15
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
20