2013-04-17 45 views
0

我想向TreeView添加一个上下文菜单。这可以通过以下代码来完成:使用HierarchicalDataTemplate将ContextMenu添加到TreeView

<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}"> 
... 

我的TreeView只有两个级别。班和学生。

我现在的问题是,我有一个HierarchicalDataTemplate我的TreeView和我只是想显示文本菜单如果右击是一类节点上

这看起来像

<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> 

我该如何解决这个问题?

回答

0

我建议添加一个视图模型来包装你的类类型,并为它创建一个ContextMenu属性。实例化这些视图模型以包装每个Class类型,并将HierarchicalDataTemplate中的DataType更改为新的视图模型的类型。然后,HierarchicalDataTemplate中的标签可以绑定到ContextMenu属性,并且可以从TreeView中删除ContextMenu绑定。它将显示在Class对象上,但不显示在Pupil对象上。

相关问题