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

Soyez le premier à donner votre avis sur cette source.

Vue 8 176 fois - Téléchargée 733 fois

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

Ajouter un commentaire

Commentaires

Messages postés
24
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
15 septembre 2017

J'ai oublié de préciser que j'utilise Visual Studio 2010 et le Framework .NET 4
C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Xaml.dll
Messages postés
3
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
19 octobre 2010

Bonjour,

Ou se trouve physiquement la référence system.xaml. J'ai bien system.xml mais pas system.xaml ?

Merci

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.