2011-04-14 59 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}" />