Тихое обновление элементов DataGrid - PullRequest
3 голосов
/ 11 января 2012

У меня есть .NET 4.0 WPF DataGrid с около 2000 отсортированных элементов и одним выбранным элементом.DataGrid обновляется каждые 500 мсек из отдельного потока, вызывая добавление и / или удаление элементов.После каждого обновления коллекция элементов сортируется.

Проблема заключается в том, что если выбранный элемент находится ближе к середине списка, он часто удаляется из видимой области после нескольких обновлений.Я ищу способ обновить DataGrid, не обращая на это внимания пользователя, то есть оставить выбранный элемент в той же позиции в видимой области.

Пока у меня есть 2 идеи, как обойти эту проблему, ноНи один из них не заставляет меня гордиться:

  1. Измените процесс обновления с автоматического на ручной, то есть установите TextArea с несколькими ожидающими обновлениями и кнопкой «Обновить».Это нежелательно, поскольку мне нужно будет повторно договориться с владельцем моего продукта.
  2. Перед каждым обновлением просматривайте элементы, чтобы получить коллекцию видимых элементов (используя этот подход) иполучить относительную позицию выбранного элемента в видимых элементах.Затем запустите обновления и прокрутите выбранный элемент в исходное положение, используя ScrollIntoView.Проблема с этим расширением состоит в том, что программе придется циклически проходить через все элементы каждые 500 мс, что довольно много для процессора.

Я использовал для решения этой проблемы в WinForms, используяСвойство TopIndex, но его эквивалент в WPF отсутствует.

Подводя итог, можно подумать о том, как можно добавлять / удалять элементы в отсортированном и часто обновляемом объекте DataGrid без необходимости преследовать элемент.интерес будет высоко ценится.

1 Ответ

3 голосов
/ 11 января 2012

Возможно, вы могли бы взглянуть на ScrollViewer и его элементы, такие как VerticalOffset, ScrollToVerticalOffset Дайте мне знать, если это поможет

...