2011-04-14 56 views
5

我有一段时间试图动态绑定DataGrid上的ContextMenu。 DataGrid绑定到对象的列表,它的伟大工程:WPF 4.0 Databinding DataMrid上的ContextMenu

<DataGrid ItemsSource="{Binding DataGridItems}"> 

对于每个的DataGridItem对象我都暴露在我想用绑定到文本菜单属性的MenuItems的列表。 我想下面的,但我觉得我失去了一些东西:

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

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

+0

可能只是一个错字,但是代表单个项目的类称为“DataGridItems”?另外,发布更完整的代码可能会使其更容易排除故障。 – 2011-04-14 23:33:22

+0

你是对的,类名应该是DataGridItem。我会更新。 – Exist 2011-04-15 00:46:41

回答

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> 

+0

这几乎适用于我,但我需要用''替换'块 – 2014-09-02 00:06:14

3

相信this tutorial您的问题,可有效地你必须做的:

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