2013-04-17 5 views
0

Je souhaite ajouter un menu contextuel à un TreeView. Ce que je peux faire par le code suivant:Ajouter ContextMenu à TreeView avec HierarchicalDataTemplate

<TreeView x:Name="treeView" Grid.Row="1" Grid.Column="0" ItemsSource="{Binding Classes}" 
       commandBehaviors:MouseDoubleClick.Command="{Binding TreeMouseDoubleClick}" 
       commandBehaviors:MouseDoubleClick.CommandParameter="{Binding ElementName=treeView, Path=SelectedItem}" 
       Margin="3,3,3,3" ContextMenu="{Binding ContextMenu, Mode=OneWay}"> 
... 

Mon TreeView a seulement deux niveaux. Classe et élève.

Mon problème est maintenant, que j'ai un HierarchicalDataTemplate pour mon TreeView et je veux seulement montrer l'contextMenu si le clic droit est sur une classe nœud

Cela ressemble

<HierarchicalDataTemplate DataType="{x:Type Entity:Class}" ItemsSource="{Binding Pupils}"> 
       <Label Content="{Binding Name}"/> 
      </HierarchicalDataTemplate> 
      <DataTemplate DataType="{x:Type Entity:Pupil}"> 
       <Label Margin="0"> 
        <Grid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="Auto"/> 
          <ColumnDefinition Width="Auto"/> 
         </Grid.ColumnDefinitions> 
         <Label Grid.Column="0" Content="{Binding Lastname}" Margin="0"/> 
         <Label Grid.Column="1" Content="{Binding Firstname}" Margin="0"/> 
        </Grid> 
       </Label> 
      </DataTemplate> 

Comment puis-je resoudre ceci?

Répondre

0

Je suggère d'ajouter un modèle de vue pour envelopper votre type de classe, et en créant une propriété pour le ContextMenu. Instanciez ces modèles de vue pour recouvrir chaque type de classe et modifiez DataType dans votre HierarchicalDataTemplate pour qu'il devienne le nouveau type de modèle de vue. Ensuite, l'étiquette de votre HierarchicalDataTemplate peut se lier à la propriété ContextMenu et vous pouvez supprimer la liaison ContextMenu de votre TreeView. Il apparaîtra sur les objets Class, mais pas sur les objets Pupil.

Questions connexes