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);
}
}