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


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]