Я попробовал немного другой подход, используя событие LoadingRow в DataGrid.Я не люблю использовать это конкретное событие, если мне не нужно, но, поскольку я не работал с большими объемами данных, это работает довольно хорошо.Единственная вещь, которую я не имею в этом примере, - это команда, используемая для выполнения действия.Вы можете использовать команду для объекта DataContext или другого механизма.
private void DataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
var contextMenu = new ContextMenu();
var deleteMenuItem = new MenuItem {Header = "Delete User"};
contextMenu.Items.Add(deleteMenuItem);
ContextMenuService.SetContextMenu(e.Row, contextMenu);
}