WPF MVVM异步绑定加载事件,用于将所选项目滚动到视图中

时间:2015-06-30 12:45:50

标签: wpf listview asynchronous binding loaded

我的应用程序中有一个列表框,它加载了很多对象,因此我使用async绑定到其ItemsSource属性而不是阻止UI。

我的问题是我想在ItemsSource时滚动到所选项,因此加载了异步绑定(使用ListView.ScrollIntoView()方法)。

有人知道这方面的解决方案吗?或者我应该使用ListView的哪个事件发生在正确的时间用于此目的?

2 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:0)

啊我找到了解决方案! LisBox有一个名为SelectionChanged的事件。这个事件对我来说很好,因为通过绑定为我的列表框设置了SelectedItem,当加载了异步字体列表时,将触发此事件,因为将在UI中选择所选项目。

如果我在此事件中调用ScrollIntoView(),那么它可以正常工作。因为我只在加载字体系列时才需要这种行为,所以在我将列表框滚动到所选项目之后立即取消订阅此事件。