我需要实现一个绑定到Web服务返回的集合的contextMenu。 返回的数据是ContextMenuModel类的集合:
List<ContextMenuItem> menuItems = webService.GetMenuItemsForUser(userID);
public class ContextMenuItem
{
public string MainItemName { get; set; }
public List<ContextSubItem> SubItems { get; set; }
public ContextMenuItem()
{
SubItems = new List<ContextSubItem>();
}
}
public class ContextSubItem
{
public int ID { get; set; }
public string Name { get; set; }
}
如何在ContextMenu上绑定该类?特别是,我如何将子项绑定到contextMenu?
修改
我尝试过以下但是subItems没有扩展。如果我将IsSubmenuOpen
显式设置为mainItem datatemplate,它们是可见的,但一旦关闭,它们就不会再次显示。
<DataGrid.ContextMenu>
<ContextMenu ItemsSource="{Binding MenuItems}">
<ContextMenu.ItemTemplate>
<DataTemplate>
<MenuItem Header="{Binding MainItemName}" ItemsSource="{Binding SubItems}" >
<MenuItem.ItemTemplate>
<DataTemplate>
<MenuItem Header="{Binding Name}"/>
</DataTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
</DataTemplate>
</ContextMenu.ItemTemplate>
</ContextMenu>
</DataGrid.ContextMenu>
答案 0 :(得分:1)
如果您想要嵌套集合,请使用 HierarchicalDataTemplate
:
<ContextMenu ItemsSource="{Binding MenuItems}">
<ContextMenu.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding SubItems}">
<MenuItem Header="{Binding MainItemName}"/>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<MenuItem Header="{Binding Name}"/>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</ContextMenu.ItemTemplate>
</ContextMenu>