2009-06-04 5 views
2

J'ai TextBox qui ne doit contenir qu'un entier valide. Il est validé en utilisant une ValidationRule personnalisée. Le problème que je rencontre est que lorsque TextBox.Text est invalide, dites "3a", et que je tape un autre "a", alors la propriété attachée TextBox Validation.HasError change de TRUE -> FALSE -> TRUE. Mon logiciel réagit chaque fois que Validation.HasError est FALSE, mais le TextBox.Text est "3a" à ce moment-là, ce qui n'est pas souhaitable. Voici comment je vois les choses: TextBox.Text = "3a" et Validation.HasError = TRUE. Maintenant, je tape un "a" supplémentaire et ce qui suit arrive. D'abord, le processus de validation supprime l'objet ValidationError existant et déclenche un événement Validation.Error avec ValidationErrorEventArgs.Action = "Supprimé". Maintenant, Validation.HasError = FALSE. Directement, le processus de validation ajoute une nouvelle ValidationError et déclenche un événement Validation.Error avec ValidationErrorEventArgs.Action = "Added". Maintenant, le Validation.HasError = TRUE à nouveau. Tout ce que je peux faire, c'est réagir aux événements Validation.Error, puis inspecter la propriété attachée Validation.HasError de l'objet source pour voir si elle est vraie ou fausse. Malheureusement Validation.HasError renvoie false lorsque TextBox.Text = "3a" qui n'est clairement pas un nombre entier valide.Comportement étrange de Validation.Error et Validation.HasError de WPF

Toutes les idées seraient très utiles. Merci :)

+0

Pouvez-vous mettre ValidatesOnException = true sur la liaison et voir si les changements de comportement? –

Répondre

0

Vous pouvez vérifier précisément si l'erreur est ajouté ou supprimé dans le cas où votre validation dépend que:

(e.Action == ValidationErrorEventAction.Added) doStuff();