2010-12-13 23 views
3

J'ai un ListBox lié à une ObservableCollection de type T - chaque ListBoxItem est une case à cocher avec IsChecked lié à une propriété bool dans T. Je veux valider les éléments vérifiés dans le ListBox de sorte qu'à au moins une case à cocher doit être cochée - si aucune des cases à cocher n'est cochée, je veux montrer une bordure rouge (notification de validation standard) autour de la ListBox.Validation de données sur un ListBox dans WPF

Comment puis-je faire cela? Puis-je utiliser ValidatesOnDataErrors?

Répondre

2

Mettre en oeuvre IDataErrorInfo dans la classe qui expose la propriété ObservableCollection<T> et faire l'indexeur retourner une erreur pour le nom de cette propriété si tous les objets de la collection ont une valeur de false dans leur propriété booléenne. Ensuite, utilisez le DataErrorValidationRule dans le ValidationRules de votre reliure.

+1

Je ne suis pas sûr de ce que vous voulez dire. L'indexeur IDataErrorInfo n'est jamais appelé pour la propriété ObservableCollection car il ne change pas, seules les valeurs dans T changent – Paley

+1

Ugh. Vous devez câbler quelque chose pour élever 'PropertyChanged' quand la propriété devient valide ou invalide. C'est un peu plus compliqué. Je ferais en sorte que la classe contenant la collection écoute 'PropertyChanged' sur les éléments de la collection (en supposant qu'ils l'aient levée, sinon, c'est encore plus compliqué), et revaliderait et éleverait son propre événement' PropertyChanged' quand la propriété 'IsChecked' (quel que soit son nom) change sur l'un des éléments. Cela a-t-il du sens? –

+0

D'une certaine manière, j'ai essayé de résoudre ce problème pendant deux semaines. Il y a très peu d'informations disponibles pour la validation autre que sur les zones de texte. J'ai décidé de ne pas déranger avec le mécanisme de validation intégré, c'est trop désordonné et mal conçu. Merci tout de même pour ta contribution. – Paley