数据绑定ContextMenu

时间:2014-08-04 15:47:49

标签: c# wpf xaml data-binding contextmenu

我需要实现一个绑定到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>

1 个答案:

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