Here is an example of how this can be achieved by explicitly setting columns:
<DataGrid ItemsSource="{Binding MyItems}" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTemplateColumn> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding Column1Data}" HorizontalAlignment="Stretch"> <TextBlock.ContextMenu> <ContextMenu> <MenuItem Header="Col 1 Item 1"/> <MenuItem Header="Col 1 Item 2"/> </ContextMenu> </TextBlock.ContextMenu> </TextBlock> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTemplateColumn> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <CheckBox IsChecked="{Binding Column2Data}" HorizontalAlignment="Stretch" > <CheckBox.ContextMenu> <ContextMenu> <MenuItem Header="Col 2 Item 1"/> <MenuItem Header="Col 2 Item 2"/> </ContextMenu> </CheckBox.ContextMenu> </CheckBox> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid>
This example includes a Text column and a CheckBox column. You can modify the CellTemplate to suit your requirements and, of course, use resources to avoid code duplication.
source share