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?

Était-ce utile?

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:

  1. dans votre expression de liaison de données, vous devez ajouter " ValidatesOnException = True "
  2. 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.
  3. 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.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top