2011-04-14 24 views
5

Me está costando mucho tratar de vincular dinámicamente el ContextMenu en un DataGrid. La cuadrícula de datos está ligada a una lista de objetos que funciona muy bien:WPF 4.0 Enlace de datos al ContextMenu en el DataGrid

<DataGrid ItemsSource="{Binding DataGridItems}"> 

Para cada uno de los objetos DataGridItem que tengo una lista de MenuItems expuestas en una propiedad de la que me gustaría utilizar para enlazar con el ContextMenu. probé la de abajo, pero creo que me falta algo:

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

Cualquier ayuda u orientación sería muy apreciado.

+0

Probablemente sólo un error tipográfico , pero su clase que representa un solo elemento se llama "DataGridItems"? Además, publicar un código más completo probablemente facilitará la resolución de problemas. –

+0

Está en lo correcto, el nombre de la clase debería haber sido DataGridItem. Voy a actualizar. – Exist

Respuesta

6

Esto es como terminé resolverlo:

<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

Esto casi funcionó para mí, pero necesitaba reemplazar el bloque ' con' 'en su lugar –

3

Creo this tutorial describe su problema, pero con eficacia que tendría que hacer:

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