Всякий раз, когда я изменяю ItemsSource (или запускает сброс коллекции), WPF не сбрасывает позицию полосы прокрутки ListView / DataGrid наверх.Это не страшно, если есть хороший способ сделать это вручную, но кажется, что нет.
В настоящее время я делаю:
ScrollViewer.ScrollToTop();
ScrollViewer.UpdateLayout();
Grid.ItemsSource = Data;
Что вызывает некоторое мерцание из-заUpdateLayout сначала перерисовывает элемент управления.
Другой способ заключается в следующем:
Grid.ItemsSource = Data;
ScrollViewer.ScrollToTop();
Кажется, это не вызывает мерцания, но поскольку позиция прокрутки изменена ПОСЛЕ того, как установлен ItemSource,он заставляет WPF сначала перебрать неправильные элементы в ItemsSource, прежде чем он получит правильные элементы (со смещением 0).Поскольку коллекция виртуализирована, это вызывает ненужные запросы SQL для элементов, которые никогда не будут отображаться.
Есть ли другой способ сделать это, который не мерцает или сначала извлекает неправильные элементы?