#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]