WPF 4.0数据绑定DataGrid上的ContextMenu
我在尝试在DataGrid上动态绑定ContextMenu时花了很多时间。DataGrid绑定到一个非常有用的对象列表: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 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>