WPF MVVM - асинхронное связывание загруженного события для прокрутки выбранного элемента в поле зрения.

В моем приложении есть список, который загружает много объектов, поэтому я использую асинхронную привязку к свойству ItemsSource, чтобы не блокировать пользовательский интерфейс.

Моя проблема заключается в том, что я хотел бы прокрутить до выбранного элемента, когда загружен ItemsSource, то есть асинхронная привязка (с помощью метода ListView.ScrollIntoView()).

Кто-нибудь знает решение для этого? Или какое событие ListView я должен использовать, которое происходит в нужное время для этой цели?

2 ответа

Ах, я нашел решение! В LisBox есть событие SelectionChanged. Это событие хорошо для меня, потому что SelectedItem устанавливается для моего списка посредством привязки, и когда загружается асинхронный список шрифтов, это событие будет запущено, так как выбранный элемент будет выбран в пользовательском интерфейсе.

Если я вызываю ScrollIntoView() в этом событии, то это работает правильно. И поскольку мне нужно такое поведение только при загрузке семейств шрифтов, я отписываюсь от этого события сразу после того, как сделал прокрутку списка до выбранного элемента.

Может быть, это будет работать... Если у вас есть ListView названный myListViewВы можете проверять каждый раз, когда элементы меняются, и прокручивать выбранный элемент в представление.

myListView.ItemContainerGenerator.ItemsChanged += new ItemsChangedEventHandler(ItemContainerGenerator_ItemsChanged);

Обработчик события:

void ItemContainerGenerator_ItemsChanged(object sender, ItemsChangedEventArgs e)
{
    if (myListView.SelectedItem != null)
    {
        myListView.ScrollIntoView(myListView.SelectedItem);
    }
}
Другие вопросы по тегам