我的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这样做的方法。 感谢
答案 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
是您的基础源对象中的属性。