Я думаю, у вас, возможно, неправильное мышление в этом сценарии, возможно, вы переходите из WinForms в мир WPF ...
В WPF DataGrid вы в основном никогда не манипулируете данными через DataGrid, вы всегда работаете непосредственно с источником данных. Что касается «кажется, не существует простого способа сделать это» - вы правы. Это будет сложнее, чем следовало.
Если бы я должен был реализовать функцию поиска / замены - каждый щелчок сначала выделил бы следующий случай, затем я мог бы либо пропустить / найти_следующий, либо заменить - тогда я бы сделал это так:
1) Нам нужно знать нашу текущую позицию - DataGrid.CurrentItem
дает текущий объект (источник данных);
2) Теперь мы выполняем поиск по источнику данных, чтобы найти следующий случай, начиная с текущего местоположения объекта (например, var indx = List<object>.FindIndex(...)
, за которым следует var nextItem = List<object>[indx]
);
3) Затем нам нужно прокрутить DataGrid до найденного объекта и отобразить DataGridRow - DataGrid.ScrollIntoView(nextItem);
(перед вызовом может потребоваться выполнить DataGrid.UpdateLayout (), возможно, есть некоторые изюминки со встроенным .NET 4 - в DataGrid по моему опыту);
4) Вы уже должны знать, как выделить ячейку ...;
5) Дождитесь ввода пользователя, либо пропустите, либо замените;
6) Если мы заменим, мы можем либо использовать DataGrid.CurrentItem , либо переменную nextItem и заменить некоторое значение новым значением. В зависимости от того, как вы настроили свою DataGrid, вам может потребоваться выполнить некоторый вызов Refresh () / UpdateLayout () или BindingOperations.GetBindingExpression (...). UpdateTarget (), чтобы обновить DataGrid;
7) Наконец, вернитесь к шагу 1 и повторите;