Reputation: 2060
I need to implement a contextMenu bound to a collection returned from a web service. The data returned is a collection of the ContextMenuModel class:
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; }
}
How would I bind that class on a ContextMenu? Particularly, how would I bind the subitems to a contextMenu?
EDIT
I've tried the following but the subItems don't expand. If I explicitly set IsSubmenuOpen
to the mainItem datatemplate, they are visible, but once closed, they don't show again on a second attempt.
<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>
Upvotes: 1
Views: 170
Reputation: 81253
Use HierarchicalDataTemplate
in case you want nested collection:
<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>
Upvotes: 1