Я думаю, что решение может иметь проблему. Каждый раз, когда строка загружается, она добавляет обработчик событий, поэтому, если строка когда-либо используется повторно, она может накапливать обработчики событий. Я бы порекомендовал удалить обработчик событий, когда строка выгружена. Вот мой предложенный код:
private void dg_LoadingRow(object sender, DataGridRowEventArgs e)
{
e.Row.MouseRightButtonDown += new MouseButtonEventHandler(Row_MouseRightButtonDown);
}
void Row_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
dg.SelectedItem = ((sender) as DataGridRow).DataContext;
}
// new portion
private void dg_UnloadingRow(object sender, DataGridRowEventArgs e)
{
e.Row.MouseRightButtonDown -= new MouseButtonEventHandler(Row_MouseRightButtonDown);
}