InputPanel for WPF
プロパティによる検証
機能 > データ検証 > プロパティによる検証

InputPanel では、組み込みの検証機能が失敗したり不十分である場合にユーザー入力を検証するためのプロパティレベルの検証機能が提供されています。このタイプの検証では、データ検証規則をプロパティセッターコード内で指定します。InputPanel は、プロパティレベルの検証を実装するために 2 種類のマークアップをサポートしています。

次の図に、無効な入力に対するプロパティレベルの検証の例を示します。

標準属性マークアップ

アプリケーションのプロパティセッターコード内に標準属性マークアップを追加することで、ユーザー入力に対してプロパティレベルの検証を適用できます。コントロールは、System.ComponentModel.DataAnnotations アセンブリ内のいくつかのクラスを直接使用して、このマークアップにアクセスします。

次のコードは、標準属性マークアップをプロパティセッターコード内に追加して、検証を適用する例を示します。この例では、「クイックスタート」で作成したサンプルを使用します。

  <DisplayName("名前")>
 <Required(ErrorMessage:="このフィールドは空にすることはできません。")>
  Public Property 名前() As String
      Get
          Return m_Name
      End Get
      Set(value As String)
          m_Name = value
      End Set
  End Property

  <DisplayName("電話番号")>
<Required(ErrorMessage:="このフィールドは空にすることはできません。")>
  Public Property 電話番号() As String
      Get
          Return m_Phone
      End Get
      Set(value As String)
          m_Phone = value
      End Set
  End Property
[DisplayName("名前")]
[Required(ErrorMessage = "このフィールドは空ことはできません。")]
public string 名前 { get; set; }

[DisplayName("電話番号")]
[Required(ErrorMessage = "このフィールドは空ことはできません。")]
public string 電話番号 { get; set; }

カスタム属性マークアップ

InputPanel では、プロパティレベルの検証を行うためにカスタムマークアップもサポートしています。カスタムマークアップは、ビジネスのニーズに応じて検証規則をカスタマイズする場合に便利です。また、カスタムマークアップを使用すると、入力フィールドに対して複数の検証規則を組み合わせることができます。たとえば、カスタムマークアップを使用して、Phone Number フィールド内の null 値またはホワイトスペースの有無およびその最小長さと最大長さを 1 つの検証規則で検証することができます。

以下の手順は、プロパティレベルの検証のためのカスタムマークアップをコードで作成および適用する例を示します。この例では、「クイックスタート」で作成したサンプルを使用します。 

  1. クラス CustomValidatorを作成し、null 値またはホワイトスペースの有無のチェックおよび Phone Number フィールドの最小長さと最大長さのチェックを行う検証規則を定義します。
    Public Class CustomValidator
        Public Shared Function ValidatePhoneNumber(PhoneNumber As String) As ValidationResult
            If String.IsNullOrWhiteSpace(PhoneNumber) Then
                Return New ValidationResult("電話番号はなしにできません。",
                   New List(Of String)() From {"電話番号"})
            ElseIf PhoneNumber.Length > 12 OrElse PhoneNumber.Length < 9 Then
                Return New ValidationResult("電話番号は8桁でなければなりません" +
              " および 12桁未満でなければなりません。",
                   New List(Of String)() From { "電話番号"})
            Else
    
                Return ValidationResult.Success
            End If
        End Function
    End Class
    
    public class CustomValidator
    {
        public static ValidationResult 
            ValidatePhoneNumber(string PhoneNumber)
        {
            if (string.IsNullOrWhiteSpace(PhoneNumber))
            {
                return new ValidationResult("電話番号はなしにできません。", 
                    new List<string>() { "電話番号" });
            }
            else if (PhoneNumber.Length > 12 || PhoneNumber.Length < 9)
            {
                return new ValidationResult
      ("電話番号は8桁でなければなりません" +
          " および 12桁未満でなければなりません。", 
                    new List<string>() { "電話番号" });
            }
           
            else
            {
                return ValidationResult.Success;
            }
        }
    }
    
  2. プロパティセッターコードにこのカスタムマークアップを追加して、Phone Number フィールドで行われた入力を検証します。
      <DisplayName("電話番号")>
    <CustomValidation(GetType(CustomValidator), "ValidatePhoneNumber")>
      Public Property 電話番号() As String
          Get
              Return m_Phone
          End Get
          Set(value As String)
              m_Phone = value
          End Set
      End Property
    
    [DisplayName("電話番号")]
    [CustomValidation(typeof(CustomValidator), "ValidatePhoneNumber")]               
    public string 電話番号 { get; set; }
    public int 給料 { get; set; }
    
関連トピック