Meilleures pratiques pour les règles de liaison et de validation des données WPF
-
09-06-2019 - |
Question
J'ai une application WPF très simple dans laquelle j'utilise la liaison de données pour permettre l'édition de certains objets CLR personnalisés. Je souhaite maintenant valider certaines entrées lorsque l'utilisateur clique sur Enregistrer. Cependant, tous les livres WPF que j'ai lus ne consacrent pas vraiment de place à ce problème. Je vois que vous pouvez créer des règles de validation personnalisées, mais je me demande s’il serait excessif pour mes besoins.
Ma question est donc la suivante: existe-t-il un bon exemple d'application ou d'article à un endroit qui illustre les meilleures pratiques pour valider la saisie de l'utilisateur dans WPF?
La solution
Je pense que le nouveau moyen préféré pourrait être d'utiliser IDataErrorInfo
En savoir plus ici
Autres conseils
Tiré de Patterns & amp; Documentation sur les pratiques :
Validation des données et rapport d'erreur
Votre modèle de vue ou modèle sera souvent nécessaire pour effectuer la validation des données et signaler toute validation de données erreurs à la vue afin que l'utilisateur peut agir pour les corriger.
Silverlight et WPF fournissent un support technique pour gérer les erreurs de validation des données qui se produisent lors du changement individuel propriétés liées aux contrôles dans la vue. Pour des propriétés uniques qui sont liés aux données à un contrôle, le voir le modèle ou le modèle peut signaler une donnée erreur de validation dans la propriété passeur en rejetant un mauvais entrant valeur et jeter une exception. Si la propriété ValidatesOnExceptions sur la liaison de données est vraie, les données moteur de reliure dans WPF et Silverlight va gérer l'exception et afficher un signal visuel à l'utilisateur qu'il y a une erreur de validation des données.
Cependant, en lançant des exceptions avec propriétés de cette façon devrait être évité si possible. Une alternative L’approche consiste à mettre en œuvre le IDataErrorInfo ou INotifyDataErrorInfo interfaces sur votre modèle de vue ou modèle Des classes. Ces interfaces permettent à votre voir modèle ou modèle pour effectuer des données validation pour une ou plusieurs propriétés valeurs et pour renvoyer un message d'erreur à la vue afin que l'utilisateur puisse être notifié de l'erreur.
La documentation explique ensuite comment implémenter IDataErrorInfo et INotifyDataErrorInfo.
Personnellement, j'utilise des exceptions pour gérer la validation. il nécessite les étapes suivantes:
- dans votre expression de liaison de données, vous devez ajouter " ValidatesOnException = True "
- dans votre objet de données auquel vous vous associez, vous devez ajouter le gestionnaire DependencyPropertyChanged où vous vérifiez si la nouvelle valeur remplit vos conditions - sinon - vous restaurez la valeur ancienne de l'objet (si vous en avez besoin) et vous lève une exception.
- dans votre modèle de contrôle utilisé pour afficher une valeur non valide dans le contrôle, vous pouvez accéder à la collecte des erreurs et afficher un message d'exception.
Le truc ici est de ne lier que des objets dérivés de DependencyObject. La mise en œuvre simple de INotifyPropertyChanged ne fonctionnerait pas - il y a un bogue dans le framework, qui vous empêche d'accéder à la collecte des erreurs.
Vérifiez également cet article . Soi-disant Microsoft a publié son Enterprise Library (v4.0) à partir de leurs modèles et pratiques où ils couvrent le sujet de la validation, mais dieu sait pourquoi ils n'ont pas inclus la validation pour WPF, donc l'article du blog que je vous dirige to, explique ce que l'auteur a fait pour l'adapter. J'espère que cela aide!
Vous êtes peut-être intéressé par l'exemple d'application BookLibrary du Framework d'application WPF ( WAF) . Il montre comment utiliser la validation dans WPF et comment contrôler le bouton Enregistrer en cas d'erreur de validation.
Si votre classe d'entreprise est directement utilisée par votre interface utilisateur, il est préférable d'utiliser IDataErrorInfo car cela rapproche la logique de leur propriétaire.
Si votre classe d'entreprise est une classe de stub créée par une référence à un service WCF / XmlWeb, vous ne pouvez / ne devez pas utiliser IDataErrorInfo ni émettre Exception à utiliser avec ExceptionValidationRule. Au lieu de cela, vous pouvez:
- Utiliser une règle de validation personnalisée.
- Définissez une classe partielle dans votre projet d'interface utilisateur WPF et implémentez IDataErrorInfo.