Bonjour!

Je souhaite mettre en place une validation des donn�es en WPF lorsque l'utilisateur clique sur un bouton "Valider".

J'ai actuellement un BindingGroup dans un StackPanel pour g�rer l'annulation des changements de l'utilisateur gr�ce aux m�thodes CommitEdit() et CancelEdit() qui fonctionnent tr�s bien!

J'ai vu que l'on doit cr�er des ValidationRules pour ajouter une couche de validation.

Mon probl�me est que quand je lance CommitEdit(), il valide les donn�es dans ma source et seulement ensuite il v�rifie la ValidationRule... Et donc m�me si les donn�es ne sont pas correctes, mon objet est mis � jour avec de mauvaises donn�es...

J'ai donc essay� de changer ValidationStep mais soit cela ne change rien ou lors de la v�rification de ValidationRule, la nouvelle valeur de ATT_LIBELLE n'est pas affect�e, elle reste sur l'ancienne valeur avant la validation... Donc pas vraiment possible de v�rifier quoique ce soit!

Comment faire pour valider les nouvelles valeurs dans la ValidationRule et que CommitEdit() fasse un commit seulement qu'une fois que tout est ok ?

Merci.

BindingGroup :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
<StackPanel x:Name="spObjet" Grid.Row="1" DataContext="{Binding oObjetEdit}">
    <StackPanel.BindingGroup>
        <BindingGroup>
            <BindingGroup.ValidationRules>
                <local:ObjetValidationRule ValidationStep="CommittedValue" />
            </BindingGroup.ValidationRules>
        </BindingGroup>
    </StackPanel.BindingGroup>
 
    <TextBox x:Name="txtLibelle" Text="{Binding ATT_LIBELLE}" />
    ...
</StackPanel>
ValidationRule :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
public class ObjetValidationRule : ValidationRule
{
    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        var bindingGroup    = (value as BindingGroup);
        var oObjet          = (bindingGroup.Items[0] as Attribut);
 
 
        if (string.IsNullOrEmpty(oObjet.ATT_LIBELLE))
        {
            return new ValidationResult(false, "Vous devez renseigner un libellé");
        }
 
        return ValidationResult.ValidResult;
    }
}