У меня есть .NET 4.0 WPF DataGrid с около 2000 отсортированных элементов и одним выбранным элементом.DataGrid обновляется каждые 500 мсек из отдельного потока, вызывая добавление и / или удаление элементов.После каждого обновления коллекция элементов сортируется.
Проблема заключается в том, что если выбранный элемент находится ближе к середине списка, он часто удаляется из видимой области после нескольких обновлений.Я ищу способ обновить DataGrid, не обращая на это внимания пользователя, то есть оставить выбранный элемент в той же позиции в видимой области.
Пока у меня есть 2 идеи, как обойти эту проблему, ноНи один из них не заставляет меня гордиться:
- Измените процесс обновления с автоматического на ручной, то есть установите TextArea с несколькими ожидающими обновлениями и кнопкой «Обновить».Это нежелательно, поскольку мне нужно будет повторно договориться с владельцем моего продукта.
- Перед каждым обновлением просматривайте элементы, чтобы получить коллекцию видимых элементов (используя этот подход) иполучить относительную позицию выбранного элемента в видимых элементах.Затем запустите обновления и прокрутите выбранный элемент в исходное положение, используя
ScrollIntoView
.Проблема с этим расширением состоит в том, что программе придется циклически проходить через все элементы каждые 500 мс, что довольно много для процессора.
Я использовал для решения этой проблемы в WinForms, используяСвойство TopIndex, но его эквивалент в WPF отсутствует.
Подводя итог, можно подумать о том, как можно добавлять / удалять элементы в отсортированном и часто обновляемом объекте DataGrid без необходимости преследовать элемент.интерес будет высоко ценится.