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

Mise à jour : novembre 2007

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 : 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.

Pour l'exemple complet, consultez Validation de la couche métier, exemple.

Voir aussi

Tâches

Comment : implémenter la validation de la liaison

Référence

ExceptionValidationRule

Autres ressources

Exemples de liaisons de données

Rubriques Comment relatives aux liaisons de données