Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF 4.0数据绑定DataGrid上的ContextMenu_Wpf_Data Binding_Datagrid_Contextmenu - Fatal编程技术网

WPF 4.0数据绑定DataGrid上的ContextMenu

WPF 4.0数据绑定DataGrid上的ContextMenu,wpf,data-binding,datagrid,contextmenu,Wpf,Data Binding,Datagrid,Contextmenu,我在尝试在DataGrid上动态绑定ContextMenu时花了很多时间。DataGrid绑定到一个非常有用的对象列表: <DataGrid ItemsSource="{Binding DataGridItems}"> 对于每个DataGridItem对象,我都有一个在属性上公开的MenuItems列表,我想用它绑定到ContextMenu。 我尝试了以下方法,但我想我遗漏了一些东西: <DataGrid ItemsSource="{Binding DataGridIte

我在尝试在DataGrid上动态绑定ContextMenu时花了很多时间。DataGrid绑定到一个非常有用的对象列表:

<DataGrid ItemsSource="{Binding DataGridItems}">

对于每个DataGridItem对象,我都有一个在属性上公开的MenuItems列表,我想用它绑定到ContextMenu。 我尝试了以下方法,但我想我遗漏了一些东西:

<DataGrid ItemsSource="{Binding DataGridItems}">
     <DataGrid.ContextMenu>
          <ContextMenu ItemsSource="{Binding ContextMenuItems}" >
               <MenuItem Header="{Binding Name}" Command="{Binding OnClick}"></MenuItem>
          </ContextMenu>
     </DataGrid.ContextMenu>
 <DataGrid>

公共类DataGridItem
{
公共可观察收集上下文菜单项
{
获取{return\u contextMenuItems;}
}
}
任何帮助或指导都将不胜感激。

我相信描述了您的问题,但实际上您必须做到:

<ContextMenu DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}"
    ItemsSource="{Binding ContextMenuItems}" />

我就是这样解决的:

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


可能只是一个输入错误,但表示单个项的类称为“DataGridItems”?此外,发布更完整的代码可能会更容易进行故障排除。您是对的,类名应该是DataGridItem。我将更新。这几乎对我有效,但我需要用`替换
<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>