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

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

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

標準属性マークアップ

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

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

<Display(Name:="名前")>
<Required(ErrorMessage:="このフィールドは空白にできません。")>
Public Property 名前() As String
    Get
        Return m_Name
    End Get
    Set
        m_Name = Value
    End Set
End Property
Private m_Name As String

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

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

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

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

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

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