2010-02-19 3 views
6

Comment afficher les avertissements utilisateur de la même manière que les erreurs. La seule différence est que le contrôle, par ex. TextBox doit avoir un modèle d'erreur différent et similaire à Validation.HasError il doit y avoir un Validation.HasWarning. En d'autres termes, tous les problèmes de validation ne sont pas des "erreurs" (au moins dans notre application). Nous voulons indiquer visuellement si quelque chose est un avertissement ou une erreur.Styles d'erreur et d'avertissement séparés WPF

Répondre

3

J'ai parfois besoin d'un terrain d'entente. Comme Command s qui ont besoin de 3 valeurs de CanExecute plutôt que true ou false. En ce qui concerne les avertissements qui fonctionnent comme une validation, je ne connais pas toutes les pièces dont on aurait besoin, mais je pense savoir comment on pourrait commencer.

Vous devez vous appuyer sur les propriétés attachées et les comportements attachés (propriétés jointes qui s'abonnent aux événements sur l'objet et effectuent des opérations liées à ces événements lorsqu'ils se déclenchent). Vous pouvez en avoir un qui gouverne une collection d'objets ValidationRule à utiliser pour déterminer si un avertissement est émis ou non, un peu comme le font les propriétés Validation. Vous pouvez en avoir un appelé HasWarning qui est défini ou désactivé par la validation qui peut être référencée dans les déclencheurs de style/modèle.

Vous pouvez faire l'affichage d'avertissement partie du modèle de chaque contrôle, ou vous pouvez à nouveau mimétique Validation et une WarningTemplate propriété jointe qui est utilisé pour placer les informations d'avertissement dans un AdornerLayer.


Depuis des objets personnalisés ValidationRule retourner un objet ValidationResult dans lequel le ErrorContent est tout simplement un objet, et cet objet est également exposé dans les ValidationError objets que ErrorContent, vous pouvez aussi être en mesure d'utiliser la validation régulière après tout. Vous pourriez éventuellement utiliser une classe comme objet ErrorContent qui a une propriété ErrorType d'Avertissement ou d'Erreur et lier à celle-ci dans votre ErrorTemplate. Je ne suis pas sûr si avoir ValidationError présent empêcherait certaines opérations (telles que les pressions de boutons) que vous souhaiteriez autoriser, mais une sorte de proxy sur le ViewModel pourrait être créé qui juge le ErrorType.

+0

+1 pour l'observation que 'ErrorContent' est un objet, pas une chaîne. C'est un moyen très simple d'accomplir cela. Vous venez de créer une classe de message avec des sous-classes d'erreur, d'avertissement et d'information, et un 'DataTemplate' pour chaque type. –