基本的な使い方 |
このトピックでは、検証インジケータコントロールの基本的な使い方について解説します。
WPF アプリケーションでは、バインディングの機能を使用してデータ検証を行うことができます。入力検証ではバインディングされる各プロパティの Setter でチェック処理を行い、例外をスローするように実装します。
検証インジケータコントロールは、指定されたコントロールにて発生した例外をキャッチし、エラーアイコンを点滅表示することでエラーが発生したことを通知します。エラーアイコン上のマウスを移動することで、エラーの内容をツールチップで表示します。
検証インジケータコントロールの ElementName プロパティに、検証対象となるコントロールの Name プロパティまたは x:Name Attribute 属性の値を設定することで、検証インジケータコントロールは指定されたコントロールを監視し、検証が行われた際にその結果を表示するようになります。
以下のサンプルコードは、DataErrorValidationRule を使用して検証を行い、検証インジケータコントロールによって TextBox コントロールを監視し、値が空の場合は入力エラーとしてエラーアイコンを表示します。
using System.ComponentModel; using System.Windows; // 以下の1行は、MainWindow のコンストラクタ内に記述してください。 this.DataContext = new SampleData(); public class SampleData : IDataErrorInfo { public string Address { get; set; } public string Error { get { return null; } } public string this[string columnName] { get { if (columnName == "Address") if (string.IsNullOrEmpty(this.Address)) return "入力必須項目です"; return null; } } }
また、以下のサンプルコードは、DataAnnotations を使用して検証を行い、検証インジケータコントロールによって TextBox コントロールを監視し、値が空の場合は入力エラーとしてエラーアイコンを表示します。
メモ |
---|
このサンプルコードを実行する際は、「デバッグ無しで開始」([Ctrl]+[F5])を選択してください。 |
// 参照設定にて System.ComponentModel.DataAnnotations.dll アセンブリへの参照を追加してください。 using System.ComponentModel.DataAnnotations; // 以下の1行は、MainWindow のコンストラクタ内に記述してください。 this.DataContext = new SampleData(); public class SampleData { private string _address; [Required(ErrorMessage = "入力必須項目です")] public string Address { get { return _address; } set { Validator.ValidateProperty(value, new ValidationContext(this, null, null) { MemberName = "Address" }); _address = value; } } }
エラーアイコンを表示する際は、BlinkStyle プロパティの設定に基づいて点滅表示が行われます。BlinkStyle.AlwaysBlink のときは、常に点滅表示となります。BlinkStyle.BlinkOnValidate のときは、数回点滅した後点灯状態となります。BlinkStyle.NeverBlink のときは、点滅表示は行わず、常に点灯状態となります。
また、BlinkRate プロパティを使って点滅の速度をミリ秒単位で指定できます。BlinkRate プロパティに 0 を設定した場合は、BlinkStyle プロパティが BlinkStyle.NeverBlink に設定され、点滅表示は行われなくなります。
MarkError メソッドは、既存のすべての検証エラーを削除し、指定されたエラー内容でエラーアイコンを表示します。また、ClearError メソッドは、既存のすべての検証エラーを削除します。これらのメソッドを使用することで、検証インジケータによるエラー通知のタイミングを任意に制御することができます。
以下のサンプルコードは、テキストボックスに文字が入力されるたびに検証を行い、その結果に基づいてエラーアイコンを表示あるいは非表示にします。
private void TextBox1_TextChanged(object sender, TextChangedEventArgs e) { if (string.IsNullOrWhiteSpace(TextBox1.Text)) GcValidationIndicator1.MarkError(new TextBlock() { Text = "入力必須項目です。", Foreground = new SolidColorBrush(Colors.Red) }); else if (TextBox1.Text.Length > 10) GcValidationIndicator1.MarkError(new TextBlock() { Text = "10文字以内で入力してください。", Foreground = new SolidColorBrush(Colors.Green) }); else GcValidationIndicator1.ClearError(); }