Enable or Disable WPF DataGrid Context Menu Item

2019-05-13


Here is an example of how to set WPF DataGrid Context Menu items Enable/Disable status, using Context Menu Opening event.

How to Enable or Disable WPF DataGrid Context Menu Item

private void myDataGrid_ContextMenuOpening(object sender, ContextMenuEventArgs e)
{
    try
    {
        FrameworkElement element = e.Source as FrameworkElement;
        ContextMenu contextMenu = element.ContextMenu;
        if (contextMenu != null)
        {
            if (this.myDataGrid.SelectedItems.Count >= 1)
            {
                ((MenuItem)(((ContextMenu)contextMenu).Items[0])).IsEnabled = !((DGRowItem)this.myDataGrid.SelectedItem).Enabled;  //enable
                ((MenuItem)(((ContextMenu)contextMenu).Items[1])).IsEnabled = ((DGRowItem)this.myDataGrid.SelectedItem).Enabled;  //disable
                mnuEnable.IsEnabled = !((DGRowItem)this.myDataGrid.SelectedItem).Enabled;  //enable
                mnuDisable.IsEnabled = ((DGRowItem)this.myDataGrid.SelectedItem).Enabled;  //disable
            }
            else
            {
                mnuEnable.IsEnabled = false;
                mnuDisable.IsEnabled = false;
            }

            mnuDel.IsEnabled = (this.myDataGrid.SelectedIndex != -1);
            mnuRunNow.IsEnabled = (this.myDataGrid.SelectedIndex != -1);
            mnuFindinMap.IsEnabled = (this.myDataGrid.SelectedIndex != -1);
            mnuFindAndRun.IsEnabled = (this.myDataGrid.SelectedIndex != -1);
        }
    }
    catch (Exception)
    {
        throw;
    }
}

public class DGRowItem
{
    // ...
}