I want to bind an icon to a context menu item in a WPF data grid. While this works fine for the context menu in the data grid itself (right click on empty area in data grid), it doesn’t work for the items in the data grid (right click on a data row). Any ideas why this doesn’t work? Thanks for your answers.
Code:
datagridTarget.DataContext = contextIcons;
// contextIcons contains the icon elements
XAML:
<DataGrid Name="datagridTarget">
<DataGrid.Resources>
<ContextMenu x:Key="DGTContextMenu">
<MenuItem Header="Delete" Click="datagridTargetDelete_Click">
<MenuItem.Icon>
<Image Height="16" Width="16" Source="{Binding ContextDeleteIcon}"/>
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</DataGrid.Resources>
<ContextMenuService.ContextMenu>
<ContextMenu>
<MenuItem Header="Delete" Click="datagridTargetDelete_Click">
<MenuItem.Icon>
<Image Height="16" Width="16" Source="{Binding ContextDeleteIcon}"/>
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</ContextMenuService.ContextMenu>
<DataGrid.Columns>
<DataGridTemplateColumn Header="" Width="Auto" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image ContextMenu="{DynamicResource DGTContextMenu}" Height="16" Width="16" Source="{Binding ObjectImage}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
The items in a DataGrid usually each have a different DataContext to represent each item. For example with a DataGrid that is bound to a list of “Person” class, each row represents each person.
If you want to bind to your parent DataContext, you need to use a more advanced binding syntax, such as: