首次运行后,CollectionView筛选器变慢

时间:2018-08-01 02:02:27

标签: c# wpf collectionviewsource

在过滤大约1000个项目的CollectionView时,我遇到了一些严重的速度问题。

我实质上是让用户从项目列表中进行选择,这里有一个按钮,使他们可以一次选择/取消选择所有项目。第一次按下此按钮时,过滤时间不到1秒。所有后续的过滤过程最多需要10秒钟。

这是相关代码

//Assume that these call PropertyChanged as needed
public IEnumerable<Item> Items { get; set; } 
public CollectionViewSource SelectedItems { get; set; }  

public void LoadItems()
{
    Items = GetItemsFromDatabase();
    SelectedItems = new CollectionViewSource()
    {
        Source = Items,
        IsLiveFilteringRequested = true,
        LiveFilteringProperties = { "IsSelected" }
    };
    SelectedItems.Filter += (src, args) =>
    {
        var item = args.Item as Item;
        args.Accepted = item != null && item.IsSelected; 
    };
}

public void SelectAll()
{
    using (SelectedItems.DeferRefresh())
    {
        Items.ForEach(f => f.IsSelected = true);
    }
}

public void DeselectAll()
{
    using (SelectedItems.DeferRefresh())
    {
        Items.ForEach(f => f.IsSelected = false);
    }
}

视图是一个简单的数据网格

<DataGrid ItemsSource="{Binding SelectedItems}" AutoGenerateColumns="False">
    <!-- etc -->
</DataGrid>

过滤非常简单,只是一个IsSelected布尔值,我不确定究竟是什么导致了如此巨大的速度下降。

SelectAllDeselectAll几乎立即运行。 每次Filter上对CollectionViewSource事件的调用在之间发生。

有什么建议吗?

0 个答案:

没有答案