Règles de validation métier wpf (adapté au pattern mvvm)

Description

3 classes héritant de ValidationRule, permettant d'utiliser le moteur de validation de WPF via le Binding, et donc parfaitement adapté à MVVM ;-)
L'utilisation des 3 classes sont illustrés dans ce projet d'exemple.

Source / Exemple :


'Cas simple : le texte doit être renseigné : 
'on teste directement la propriété String de la vue modèle qui est bindée au Text du Textbox.
<TextBox.Text>
    <Binding Path="TexteSimple">
        <Binding.ValidationRules>
           <validation:GenericBindingTexteValidator NomPropriete="TexteSimple" 
                       ErrorMessage="Le texte doit être renseigné !"
                       ValidationStep="UpdatedValue" ValidatesOnTargetUpdated="True" />
        </Binding.ValidationRules>
    </Binding>
<TextBox.Text>

          
'Cas métier : l'entier doit être >=1 et <=10 : on teste le textbox 
'             en appelant la propriété booléenne "EntierEstValide" de la vue modèle.	
<TextBox.Text>
    <Binding Path="EntierSimple">
        <Binding.ValidationRules>
            <validation:GenericBindingBoolValidator NomPropriete="EntierEstValide" 
                        ErrorMessage="Il faut saisir un entier entre 1 et 10 !"
                        ValidationStep="UpdatedValue" ValidatesOnTargetUpdated="True" />
        </Binding.ValidationRules>
    </Binding>
<TextBox.Text>

'Cas de validation pour un groupe de contrôles grâce à Grid.BindingGroup :  
'on teste la propriété booléenne "ChoixEstValide" de la vue modèle  -> 
 <Grid.BindingGroup>
    <BindingGroup Name="MyBindingGroup" NotifyOnValidationError="True">
        <BindingGroup.ValidationRules>
            <validation:GenericBindingGroupValidator NomPropriete="ChoixEstValide" 
                        ErrorMessage="Il faut faire un choix !"
                        ValidationStep="UpdatedValue" ValidatesOnTargetUpdated="True"/>
        </BindingGroup.ValidationRules>
    </BindingGroup>
</Grid.BindingGroup>

'Accès au bouton Valider autorisé que s'il n'y a plus d'erreurs
<Button ... >
        <Style.Triggers>
            <MultiDataTrigger>
                <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding ElementName=Textbox1, 
                                                 Path=(Validation.HasError)}" Value="False" />
                    <Condition Binding="{Binding ElementName=Textbox2, 
                                                 Path=(Validation.HasError)}" Value="False" />
                    <Condition Binding="{Binding ElementName=gridGroup, 
                                                 Path=(Validation.HasError)}" Value="False" />
                    </MultiDataTrigger.Conditions>
                <Setter Property="IsEnabled" Value="True" />
            </MultiDataTrigger>
        </Style.Triggers>

Conclusion :


J'ai ajouté ces classes dans mon framework WPF pour MVVM , elles répondent à la majorité des cas de validation que j'ai eu à implémenter dans mes outils de gestion (pour l'instant !).

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.