2 votes

Comment afficher plusieurs ContextMenus différents dans WPF ListView GridView?

J'ai une ListView GridView avec des ListViewItems qui représentent différentes catégories d'éléments. Je voudrais afficher un ContextMenu différent pour chaque catégorie d'élément. J'espérais le faire en utilisant des DataTemplates mais j'ai du mal. Mon TreeView a un DataTemplate par catégorie et je vois comment je peux définir un ContextMenu différent pour chacun d'eux, mais je n'arrive pas à obtenir des DataTemplates similaires à fonctionner pour ma ListView. Est-ce que je m'égare?

Par exemple, voici l'un de mes DataTemplates pour le TreeView:

et je peux ajouter mon ContextMenu au StackPanel (je l'espère) et le tour est joué.

Mais le contenu de la GridView ressemble à ceci:

Ce imageConverter dans la ressource DataTemplate affiche l'icône appropriée pour la catégorie de l'élément ListView.

Je ne suis pas sûr par où commencer. Alors, d'abord, est-ce que ce que je veux faire est possible? Si oui, pouvez-vous me donner un coup de pouce, s'il vous plaît.

Aussi:

Actuellement, chaque ListViewItem est soutenu par un viewModel - toutes les catégories utilisent la même classe de viewModel.

Contexte:

La raison pour laquelle je veux afficher un ContextMenu différent plutôt que de changer le ContextMenu est que j'utilise Prism et les ContextMenus seront des Régions peuplées automatiquement par divers modules.

0voto

TabbyCool Points 1569

Je pense que vous pouvez le faire avec un ItemTemplateSelector, plutôt que de définir la propriété ItemTemplate sur votre ListView, utilisez la propriété ItemTemplateSelector. Il faut créer votre propre implémentation de la classe ItemTemplateSelector et définir la logique pour qu'elle sache quel modèle utiliser pour chaque ensemble de conditions, puis il vous suffit de créer un ensemble de modèles et vous devriez être prêt à partir! Il y a un bon tutoriel sur comment faire cela ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X