异步CollectionViewSource过滤?

时间:2016-01-29 18:13:30

标签: wpf collectionviewsource icollectionview

我真的很大ObservableCollection<MyItem>,我需要提供用户友好的过滤功能。

public static async Task RefilterViewAsync(this ItemsControl @this, Predicate<object> compareLogic)
{
    await Task.Run(
        () =>
        {
            var collectionView = CollectionViewSource.GetDefaultView(@this.ItemsSource);
            if (collectionView.CanFilter)
            {
                collectionView.Filter = compareLogic;
            }
            else throw new InvalidOperationException("Filtering not supported...");
            collectionView.Refresh();
        });
}

..问题是上面的代码由于某些原因不起作用。适应UI线程大约需要1分钟。任何想法如何实现异步过滤,至少能够显示一些&#34;处理..&#34;动画,以帮助用户克服这一点?

1 个答案:

答案 0 :(得分:2)

如果你有一个庞大的ObservableCollection,并且想要异步过滤它,那就自己动手吧。没有异步绑定支持AFAIK。

我的意思是创建一个ObservableCollection类型的另一个属性;这将是您的过滤集合。不是绑定实际集合,而是将过滤后的集合绑定到ItemsControl

然后异步实现自己的过滤逻辑(可能在另一个线程中),最后设置过滤后的集合属性。绑定引擎将启动并相应地更新UI。 我之前在我的一个项目中成功使用过它。

相关问题