使用HierarchicalDataTemplate将ContextMenu添加到TreeView

时间:2013-04-17 15:43:19

标签: c# wpf mvvm treeview contextmenu

我想在TreeView中添加一个contextmenu。我可以通过以下代码来完成:

<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只有两个级别。班级和学生。

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

这看起来像

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

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

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