Exécution de la validation sur un objet lié aux données après la mise à jour de la propriété

StackOverflow https://stackoverflow.com/questions/62686

Question

J'ai un formulaire de base avec des contrôles liés à la donnée à un objet implémentant l'interface INotifyPropertyChanged . J'aimerais ajouter quelques validations à quelques propriétés, mais ne souhaitez pas implémenter IDataErrorInfo pour valider quelques propriétés.

J'ai créé les fonctions qui effectuent la validation et renvoient le message d'erreur (le cas échéant) dans l'objet. Ce que je voudrais faire, c'est appeler ces fonctions à partir de mon formulaire lorsque les propriétés pertinentes de l'objet ont changé et configurer le contrôle ErrorProvider dans mon formulaire avec tous les messages d'erreur renvoyés par les fonctions de validation. .

J'ai essayé d'associer des gestionnaires d'événements aux événements Validating et LostFocus, mais ils semblent se déclencher avant la mise à jour de mon objet et ne valident donc pas les données correctes. Ce n'est que lorsque je quitte la zone de texte, que je retourne à l'intérieur, puis que la validation s'exécute sur les données correctes.

Existe-t-il un autre événement auquel je peux m'attacher pour pouvoir appeler ces fonctions de validation après la mise à jour de la propriété de mon objet? Ou est-il préférable de simplement mettre en œuvre l'interface IDataErrorInfo ?

Était-ce utile?

La solution

Je ne sais pas exactement quel est le problème, êtes-vous en train de dire que vous ne pourrez pas définir la propriété tant que le contrôle n'aura pas le focus?

Si tel est le cas, vous devez définir la liaison pour mettre à jour OnPropertyChanged au lieu de OnValidation .

La liaison à OnPropertyChanged signifie que la liaison est mise à jour immédiatement, alors que OnValidation met à jour l'objet sous-jacent uniquement lorsqu'une validation est déclenchée (ce qui est le cas pour la plupart des contrôles lorsqu'ils perdent leur focus). .

Autres conseils

Je pense avoir trouvé une solution au problème avec l'aide du message de Cameron. J'ai modifié la liaison pour mettre à jour OnPropertyChanged et, maintenant, lorsque je connecte le gestionnaire d'événements à l'événement LostFocus, la validation est effectuée sur le "nouveau". valeur de la zone de texte plutôt que ce qui était précédemment contenu dans l'objet

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top