it-swarm-fr.com

Meilleures pratiques pour les règles de liaison et de validation des données WPF

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 ValidationRules personnalisées, mais je me demande si ce serait excessif pour mes besoins.

La question que je me pose est donc la suivante: existe-t-il un bon exemple d'application ou d'article à un endroit qui illustre les meilleures pratiques pour valider les entrées utilisateur dans WPF?

100
Mark Heath

Je pense que le nouveau moyen préféré serait d'utiliser IDataErrorInfo

Lire la suite ici

83
rudigrobler

À partir de MS documentation sur les modèles et pratiques :

Validation des données et rapport d'erreur

Votre modèle de vue ou modèle devra souvent effectuer la validation des données et signaler toute erreur de validation des données à la vue afin que l'utilisateur puisse agir pour les corriger.

Silverlight et WPF prennent en charge la gestion des erreurs de validation des données lors de la modification de propriétés individuelles liées à des contrôles dans la vue. Pour les propriétés uniques liées aux données d'un contrôle, le modèle de vue ou le modèle peut signaler une erreur de validation des données dans le configurateur de propriétés en rejetant une valeur incorrecte entrante et en lançant une exception. Si la propriété ValidatesOnExceptions sur la liaison de données est true, le moteur de liaison de données dans WPF et Silverlight gérera l'exception et affichera un message indiquant à l'utilisateur qu'une erreur de validation des données s'est produite.

Toutefois, il est recommandé d’éviter autant que possible les exceptions comportant des propriétés. Une autre approche consiste à implémenter les interfaces IDataErrorInfo ou INotifyDataErrorInfo sur votre modèle de vue ou vos classes de modèle. Ces interfaces permettent à votre modèle de vue ou modèle de valider les données pour une ou plusieurs valeurs de propriété et de renvoyer un message d'erreur à la vue afin que l'utilisateur puisse être averti de l'erreur.

La documentation explique ensuite comment implémenter IDataErrorInfo et INotifyDataErrorInfo.

23
Pat

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 l'objet de données auquel vous vous liez, vous devez ajouter le gestionnaire DependencyPropertyChanged qui vous permet de vérifier si une nouvelle valeur remplit vos conditions. Si ce n'est pas le cas, 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.

l'astuce 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 la structure qui vous empêche d'accéder à la collecte des erreurs.

10
Greg

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 le blog que je dirige vous explique ce que l’auteur a fait pour l’adapter. J'espère que cela t'aides!

3
murki

L'application exemple BookLibrary de WPF Application Framework (WAF) = . Il montre comment utiliser la validation dans WPF et comment contrôler le bouton Enregistrer en cas d'erreur de validation.

2
jbe

Si votre classe métier 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:

  • Utilisez ValidationRule personnalisé.
  • Définissez une classe partielle dans votre projet d'interface utilisateur WPF et implémentez IDataErrorInfo.
0
Alex Pollan