2015-06-30 2 views
0

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

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

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

+0

Не уверен, что я понял, вы хотите прокручивать в виде новые элементы, поскольку они добавляются? –

+0

Нет, в основном я хотел бы отображать доступные шрифты для выбора типа шрифта. Но загрузка шрифтов происходит медленно, поэтому я делаю это в async, используя асинхронную привязку ({Binding Source = FontFamilies, IsAsync = True}). Но я уже знаю выбранный шрифт, поэтому он задан как SelectedItem ListView. Когда FontFamilies наконец загрузится, ListView будет загружен с семействами шрифтов, и выбранный будет выбран красиво. Но если выбранный шрифт - Tahoma, то он близок к концу списка, и я бы хотел прокрутить его, чтобы сделать мое приложение более удобным для пользователя. – user3126075

ответ

0

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

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

Событие:

void ItemContainerGenerator_ItemsChanged(object sender, ItemsChangedEventArgs e) 
{ 
    if (myListView.SelectedItem != null) 
    { 
     myListView.ScrollIntoView(myListView.SelectedItem); 
    } 
} 
+0

Привет! Спасибо за Ваш ответ! Это событие кажется хорошим, но список не прокручивается до выбранного элемента. Я проверил, и выбранный элемент не является нулевым, и я попытался использовать метод UpdateLayout() в списке, прежде чем вызывать ScrollIntoView(). Ну, я пытаюсь заставить его работать сейчас. – user3126075

+0

Не знаете, когда и как вы меняете выбор, но, возможно, попробуйте событие SelectionChanged? EDIT: Не видел, что вы отправили ответ, когда я писал это, что вы уже пробовали, и это сработало :) –

0

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

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