数据绑定ContextMenu

本文关键字:ContextMenu 数据绑定 | 更新日期: 2023-09-27 18:16:23

我需要实现一个contextMenu绑定到从web服务返回的集合。返回的数据是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?

编辑

我已经尝试了以下操作,但是子项无法展开。如果我显式地将IsSubmenuOpen设置为mainItem数据模板,它们是可见的,但是一旦关闭,它们在第二次尝试时不会再次显示。

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

数据绑定ContextMenu

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