2010-06-25 4 views
3

J'essaie de trouver la meilleure façon de valider les entrées utilisateur et j'ai regardé ValidationRule et IDataErrorInfo. J'ai une machine virtuelle et un modèle et je veux m'assurer qu'un utilisateur n'entre pas les caractères alpha dans plusieurs zones de texte liées aux doubles (ou ints).WPF (.net 3.5) ValidationRule, IDataErrorInfo

Je suis en cours d'exécution en 3 questions

1) Lorsque j'utilise le ValidationRule la méthode renvoie un « ValidationResult », mais où est-il passé? Est-il stocké en tant que propriété d'où?

2) Si j'utilise IDataErrorInfo et que j'entre un caractère alpha, il n'est jamais appelé (c'est si les nombres sont entrés) Est-ce que c'est prévu? *

* (je pensais que peut-être un convertisseur de valeur peut aider ici, mais je me sens comme si je mélangeant deux concepts distincts)

3) Vraiment ce que je veux faire est de faire une validation à la fin lorsqu'un l'utilisateur clique sur "Enregistrer" et vérifie toutes les valeurs. Alors peut-être que l'utilisation de ces deux méthodes ne sont pas ce dont j'ai besoin selon 1838300. Est-ce exact, ce ne sont vraiment que pour la validation «à la volée»? Ma pensée sur le point 3 était si le résultat de ValidationRule était stocker quelque part que je pourrais vérifier cela pour chaque contrôle ou où il est jamais stocké. Ou, si IDataErrorInfo a été appelé, je pourrais stocker manuellement un booléen pour chaque contrôle et les vérifier.

Des idées ou des idées?

Merci!

Répondre

1

Il y a deux choses, vous devez savoir:

Lorsque le type de DependencyProperty n'est pas la même que la valeur sous-jacente - une conversion automatique est essayé si aucun valueconverter est présent.

Cela fait partie du moteur de liaison normal. Donc, puisque votre entrée textbox ne se convertit pas bien en ints/doubles avec des caractères alpha, une exception est levée et sera continuellement levée jusqu'à ce que vous corrigiez la valeur de la propriété dependency (ici la propriété TextBox de TextBox) - le setter de la propriété L'objet de données sous-jacent n'est jamais atteint maintenant.

Vous pouvez vérifier ce comportement si vous recherchez des exceptions dans votre fenêtre de sortie lorsque vous modifiez le texte dans la zone de texte. Consultez cet article pour voir comment implémenter correctement Validation et IDataErrorInfo: link.

0

Vous pourriez être intéressé par l'exemple d'application BookLibrary du WPF Application Framework (WAF). Il montre comment utiliser la validation dans WPF et comment contrôler le bouton Enregistrer lorsque des erreurs de validation existent.