创建动态WPF上下文菜单

时间:2014-08-11 12:02:34

标签: c# wpf binding contextmenu menuitem

我的ViewModel中有一个ObservableCollection,我想创建一个ContextMenu,它绑定到该集合,其中集合中的每个项目都有一个子菜单,所有子菜单都是相同的。 例如,集合是{10,20,30},子菜单是 - Param(MenuItem) - 设置(MenuItem) - 重置(MenuItem) - 清除(MenuItem) 这样最终的上下文菜单看起来就像这样 - 10 - 帕拉姆 - 设置 - 重启 - 清楚 - 20 - 帕拉姆 - 设置 - 重启 - 清楚 - 30 .... 我尝试过创建资源

<x:Array x:Key="MenuResource" Type=Control>
  <MenuItem Header="Param"/>
    <MenuItem Header="Set"/>
    <MenuItem Header="Reset"/>
  <MenuItem Header="Clear"/>  
</x:Array>

并在ContextMenu的ItemContainerStyle的MenuItem样式中设置为ItemSource属性。 似乎没什么用。

有人可以告诉我XAML这样做的方法。 感谢

1 个答案:

答案 0 :(得分:1)

您必须定义 HierarchicalDataTemplate 来绑定子集合,并将外部集合直接绑定到上下文菜单的 ItemsSource ,如下所示:

<TextBlock Text="Context menu test">
    <TextBlock.ContextMenu>
        <ContextMenu ItemsSource="{Binding YourCollection}">
            <ContextMenu.ItemTemplate>
                <HierarchicalDataTemplate
                         ItemsSource="{Binding ChildCollection}">
                    <TextBlock Text="{Binding Name}"/>
                    <HierarchicalDataTemplate.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Name}"/>
                        </DataTemplate>
                    </HierarchicalDataTemplate.ItemTemplate>
                </HierarchicalDataTemplate>
            </ContextMenu.ItemTemplate>
        </ContextMenu>
    </TextBlock.ContextMenu>
</TextBlock>

假设 Name 是您的基础源对象中的属性。