Share via


Comment : implémenter une logique de validation sur des objets personnalisés

Cet exemple montre comment implémenter une logique de validation sur un objet personnalisé, puis créer une liaison avec lui.

Exemple

Vous pouvez fournir une logique de validation sur la couche métier si votre objet source implémente IDataErrorInfo, comme dans l'exemple suivant :

    Public Class Person
        Implements IDataErrorInfo

        Private _age As Integer
        Public Property Age() As Integer
            Get
                Return _age
            End Get
            Set(ByVal value As Integer)
                _age = value
            End Set
        End Property

        Public ReadOnly Property [Error]() As String Implements IDataErrorInfo.Error
            Get
                Return Nothing
            End Get
        End Property

        Default Public ReadOnly Property Item(ByVal columnName As String) As String Implements IDataErrorInfo.Item
            Get
                Dim result As String = Nothing

                If columnName = "Age" Then
                    If Me._age < 0 OrElse Me._age > 150 Then
                        result = "Age must not be less than 0 or greater than 150."
                    End If
                End If
                Return result
            End Get
        End Property
    End Class
public class Person : IDataErrorInfo
{
    private int age;

    public int Age
    {
        get { return age; }
        set { age = value; }
    }

    public string Error
    {
        get
        {
            return null;
        }
    }

    public string this[string name]
    {
        get
        {
            string result = null;

            if (name == "Age")
            {
                if (this.age < 0 || this.age > 150)
                {
                    result = "Age must not be less than 0 or greater than 150.";
                }
            }
            return result;
        }
    }
}

Dans l'exemple suivant, la propriété Texte de la zone de texte crée une liaison avec la propriété Age de l'objet Person, dont on a fait en sorte qu'il soit disponible pour une liaison via une déclaration de ressource qui reçoit le x:Keydata. DataErrorValidationRule recherche les erreurs de validation déclenchées par l'implémentation IDataErrorInfo.

<TextBox Style="{StaticResource textBoxInError}">
    <TextBox.Text>
        <!--By setting ValidatesOnExceptions to True, it checks for exceptions
        that are thrown during the update of the source property.
        An alternative syntax is to add <ExceptionValidationRule/> within
        the <Binding.ValidationRules> section.-->
        <Binding Path="Age" Source="{StaticResource data}"
                 ValidatesOnExceptions="True"
                 UpdateSourceTrigger="PropertyChanged">
            <Binding.ValidationRules>
                <!--DataErrorValidationRule checks for validation 
                    errors raised by the IDataErrorInfo object.-->
                <!--Alternatively, you can set ValidationOnDataErrors="True" on the Binding.-->
                <DataErrorValidationRule/>
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>

Au lieu d'utiliser le DataErrorValidationRule, vous pouvez affecter à la propriété ValidatesOnDataErrors la valeur true.

Voir aussi

Tâches

Comment : implémenter la validation de la liaison

Référence

ExceptionValidationRule

Autres ressources

Rubriques "Comment" relatives aux liaisons de données