WPF 4.0在DataGrid上数据绑定ContextMenu

Exi*_*ist 5 data-binding wpf datagrid contextmenu

我有一段时间试图在DataGrid上动态绑定ContextMenu.DataGrid绑定到一个很好的对象列表:

<DataGrid ItemsSource="{Binding DataGridItems}">
Run Code Online (Sandbox Code Playgroud)

对于每个DataGridItem对象,我有一个在属性上公开的MenuItem列表,我想用它来绑定到ContextMenu.我尝试了以下但我认为我遗漏了一些东西:

<DataGrid ItemsSource="{Binding DataGridItems}">
     <DataGrid.ContextMenu>
          <ContextMenu ItemsSource="{Binding ContextMenuItems}" >
               <MenuItem Header="{Binding Name}" Command="{Binding OnClick}"></MenuItem>
          </ContextMenu>
     </DataGrid.ContextMenu>
 <DataGrid>
Run Code Online (Sandbox Code Playgroud)
public class DataGridItem
{
    public ObservableCollection<ContextMenuItem> ContextMenuItems
    {
        get { return _contextMenuItems; }
    }
}
Run Code Online (Sandbox Code Playgroud)

任何帮助或指导将不胜感激.

Exi*_*ist 6

这就是我最终解决它的方法:

<StackPanel.ContextMenu>
<ContextMenu ItemsSource="{Binding ContextMenu}">
    <ContextMenu.ItemContainerStyle>
        <Style TargetType="MenuItem">
            <Setter Property="Command" Value="{Binding OnClick}" />
            <Setter Property="Icon">
                <Setter.Value>
                    <Image Source="{Binding ImageName}"></Image>
                </Setter.Value>
            </Setter>
        </Style>
    </ContextMenu.ItemContainerStyle>
    <ContextMenu.ItemTemplate>
        <HierarchicalDataTemplate DataType="{x:Type ContextMenu:ContextMenuItem}" ItemsSource="{Binding MenuItems}">
            <TextBlock Text="{Binding Name}"></TextBlock>
        </HierarchicalDataTemplate>
    </ContextMenu.ItemTemplate>
</ContextMenu>
Run Code Online (Sandbox Code Playgroud)