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 :
ValidationRule :
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>
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; } }





R�pondre avec citation
Partager