我的应用程序中有一个列表框,它加载了很多对象,所以我使用异步绑定到它的 ItemsSource 属性来不阻塞 UI。
我的问题是我想在加载 ItemsSource 时滚动到所选项目,因此异步绑定(使用 ListView.ScrollIntoView() 方法)。
有谁知道这个的解决方案?或者我应该使用哪个 ListView 事件在正确的时间发生?
我的应用程序中有一个列表框,它加载了很多对象,所以我使用异步绑定到它的 ItemsSource 属性来不阻塞 UI。
我的问题是我想在加载 ItemsSource 时滚动到所选项目,因此异步绑定(使用 ListView.ScrollIntoView() 方法)。
有谁知道这个的解决方案?或者我应该使用哪个 ListView 事件在正确的时间发生?
也许这会起作用...如果您已ListView
命名myListView
,则可以在每次更改项目时检查,并将所选项目滚动到视图中。
myListView.ItemContainerGenerator.ItemsChanged += new ItemsChangedEventHandler(ItemContainerGenerator_ItemsChanged);
事件处理程序:
void ItemContainerGenerator_ItemsChanged(object sender, ItemsChangedEventArgs e)
{
if (myListView.SelectedItem != null)
{
myListView.ScrollIntoView(myListView.SelectedItem);
}
}
啊,我找到了解决方案!LisBox 有一个名为 SelectionChanged 的事件。此事件对我来说很好,因为 SelectedItem 是通过绑定为我的列表框设置的,并且当加载异步字体列表时,将触发此事件,因为将在 UI 中选择所选项目。
如果我在此事件中调用 ScrollIntoView() 则它可以正常工作。而且由于我仅在加载字体系列时才需要此行为,因此我在将列表框滚动到所选项目后立即取消订阅此事件。