【问题标题】:async CollectionViewSource filtering?异步 CollectionViewSource 过滤?
【发布时间】:2016-01-29 18:13:29
【问题描述】:

我得到了很大的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 分钟。任何想法如何实现异步过滤,至少能够显示一些“处理..”动画来帮助用户克服这个问题?

【问题讨论】:

    标签: wpf collectionviewsource icollectionview


    【解决方案1】:

    如果您有大量的ObservableCollection,并且您想异步过滤掉它,那么您就自己动手吧。 AFAIK 没有异步绑定支持。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 2013-01-07
      • 2020-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多