2009-09-08 11 views
2

J'ai un ListView GridView avec ListViewItems qui représentent différentes catégories d'éléments. J'aimerais afficher un ContextMenu différent pour chaque catégorie d'élément. J'espérais faire cela en utilisant DataTemplates mais j'ai du mal. Mon TreeView a un DataTemplate par catégorie et je peux voir comment je peux définir un ContextMenu différent pour chacun d'eux mais je n'arrive pas à obtenir des DataTemplates similaires pour mon ListView. Est-ce que j'aboie le mauvais arbre?Comment afficher différents ContextMenus dans WPF ListView GridView?

E.g. c'est l'un de mes DataTemplates pour la TreeView:

<DataTemplate DataType="{x:Type viewModel:Cat1ViewModel}"> 
    <StackPanel Orientation="Horizontal"> 
     <Image Width="16" Height="16" Margin="3,0" 
       Source="..\Images\cat1.png"/> 
     <TextBlock Text="{Binding Name}" /> 
    </StackPanel> 
</DataTemplate> 

et je peux ajouter mon ContextMenu au StackPanel (je l'espère) et mon oncle Bob.

Mais le courage du GridView ressemble à ceci:

<ListView.Resources> 
    <DataTemplate x:Key="image"> 
     <Image Width="16" Height="16" Margin="-3,0,-3,0" 
          HorizontalAlignment="Center" 
          Source="{Binding Path=ObjectClass, 
              Converter={StaticResource imageConverter}}" /> 
    </DataTemplate> 
</ListView.Resources> 


<ListView.View> 
    <GridView> 
     <GridViewColumn Width="20" 
         CellTemplate="{StaticResource image}"/> 
     <GridViewColumn Width="140" Header="Name" 
         DisplayMemberBinding="{Binding Path=Name}" 
         infrastructure:GridViewSort.PropertyName="Name"/> 
     <GridViewColumn Width="140" Header="Type" 
         DisplayMemberBinding="{Binding Path=Category}" 
         infrastructure:GridViewSort.PropertyName="Category"/> 
     <GridViewColumn Width="400" Header="Description" 
         DisplayMemberBinding="{Binding Path=Description}" 
         infrastructure:GridViewSort.PropertyName="Description"/> 
    </GridView> 
</ListView.View> 

Ce ImageConverter dans la ressource DataTemplate affiche l'icône appropriée pour la catégorie des ListViewItem.

Je ne sais pas par où commencer. Donc, d'abord, est ce que je veux faire possible? Si oui, pouvez-vous me lancer, s'il vous plaît.

aussi:

Actuellement, chaque ListViewItem est soutenu par une viewmodel - toutes les catégories utilisent la même classe ViewModel.

Contexte:

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

Répondre

0

Je pense que vous pouvez faire cela avec un ItemTemplateSelector, plutôt que de définir la propriété ItemTemplate sur votre ListView, utilisez la propriété ItemTemplateSelector. Vous devez créer votre propre implémentation de la classe ItemTemplateSelector et définir la logique afin qu'elle sache quel modèle utiliser pour chaque ensemble de conditions, alors vous avez juste besoin de créer un ensemble de modèles et vous devriez être prêt à partir! Il y a un bon tutoriel sur la façon de le faire .

Questions connexes