100 votes

WPF Liaison de Données et la Validation des Règles de bonnes Pratiques

J'ai une question très simple application WPF dans lequel je suis à l'aide de la liaison de données pour permettre la modification de certaines personnalisé des objets CLR. Je suis maintenant en voulant mettre une entrée de validation lorsque l'utilisateur clique sur enregistrer. Cependant, tous les WPF livres que j'ai lu n'ont pas vraiment de consacrer de l'espace à cette question. Je vois que vous pouvez créer des ValidationRules, mais je me demande si ce serait trop pour mes besoins.

Donc ma question est la suivante: est-il un bon exemple d'application ou à l'article quelque part qui illustre les meilleures pratiques pour la validation de la saisie de l'utilisateur dans WPF?

83voto

rudigrobler Points 8883

Je pense que la nouvelle manière préférée pourrait être d'utiliser IDataErrorInfo

Lire plus ici

23voto

Pat Points 4681

À partir de MS est des Modèles Et Pratiques de la documentation:

La Validation des données et les Rapports d'Erreur

Votre modèle de vue ou le modèle sera souvent nécessaires pour effectuer la validation des données et de nous signaler tout de validation des données les erreurs de la vue, de sorte que l'utilisateur peut agir pour les corriger.

Silverlight et WPF fournir un soutien pour gérer les données des erreurs de validation qui se produisent lors de la modification de personne les propriétés qui sont liées aux contrôles dans la vue. Pour les propriétés qui sont liés aux données à un contrôle, la modèle de vue ou le modèle peut être le signal de données erreur de validation au sein de la propriété setter, le rejet de l'arrivée d'un mauvais de la valeur et de lancer une exception. Si la propriété ValidatesOnExceptions sur la liaison de données est vrai, les données moteur de liaison en WPF et Silverlight va gérer l'exception et d'affichage un signal visuel à l'utilisateur qu'il y a une erreur de validation de données.

Cependant, de lever des exceptions avec les propriétés de cette façon doivent être éviter, si possible. Une alternative l'approche est de mettre en œuvre la IDataErrorInfo ou INotifyDataErrorInfo interfaces sur votre modèle de vue ou le modèle des classes. Ces interfaces permettent à votre modèle de vue ou le modèle de données validation pour un ou plusieurs biens valeurs et retourner un message d'erreur de la vue, de sorte que l'utilisateur peut être informé de l'erreur.

La documentation explique comment mettre en œuvre IDataErrorInfo et INotifyDataErrorInfo.

10voto

Greg Points 295

personnellement, je suis en utilisant les exceptions pour gérer la validation. il nécessite des étapes suivantes:

  1. dans votre expression de liaison de données, vous devez ajouter "ValidatesOnException=True"
  2. dans les données de l'objet qui vous lie, vous devez ajouter DependencyPropertyChanged gestionnaire d'où vous vérifier si la nouvelle valeur correspond à des conditions - si ce n'est pas de vous restaurer à l'objet, à l'ancienne valeur (si nécessaire) et vous jeter l'exception.
  3. dans votre modèle de contrôle que vous utilisez pour l'affichage de la valeur non valide dans le contrôle, vous pouvez accéder à la collection des Erreurs et de les afficher de message d'exception.

l'astuce ici consiste à lier uniquement à des objets qui dérivent de DependencyObject. simple de mise en œuvre de INotifyPropertyChanged ne fonctionne pas - il y a un bug dans le cadre, ce qui vous empêche d'accéder à des erreurs de collecte.

5voto

murki Points 317

Aussi, Karl Shifflet a écrit un très bon article sur l'Entrée de Validation pour le M-V-VM, vous voudrez peut-être vérifier.

3voto

murki Points 317

Vérifiez également cet article. Soi-disant que Microsoft a publié leur Bibliothèque d'Entreprise (v4.0) à partir de leurs habitudes et de pratiques où ils portent sur la validation de l'objet, mais dieu sait pourquoi ils n'ont pas inclus la validation pour WPF, de sorte que le billet de blog que je suis de vous diriger à, explique ce que l'auteur a fait pour l'adapter. Espérons que cette aide!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X