如何使用过滤器集自动刷新 ListCollectionView

Gus*_*rra 2 data-binding wpf observablecollection listcollectionview

我有一个 ObservableCollection 和一个 ListCollectionView 并带有过滤谓词集。当我更改全局条件时,比如说搜索文本,我可以调用.Refresh()视图以强制它刷新。但是当集合中的一个项目改变了一个属性时,是否可以只刷新该元素的可见性?假设通过声明过滤器取决于属性?

Gay*_*Fow 7

简短的回答是肯定的。

ListCollectionView 在这里有两个有趣的属性

IsLiveFiltering是一个布尔值,获取或设置一个值,指示实时过滤数据是否被启用。

LiveFilteringProperties是包含指定参与实时过滤数据的属性的属性名称的字符串列表。

设置这两个属性会得到你想要的结果。

这是一段代码,显示了如何在已部署的应用程序中设置过滤属性...

        if (_itemWrappersListCollectionView != null && _feedInfosListCollectionView!=null)
        {
            _itemWrappersListCollectionView.IsLiveFiltering = true;
            _itemWrappersListCollectionView.IsLiveSorting = true;
            _itemWrappersListCollectionView.LiveFilteringProperties.Add("FilterStatus");
            InitialiseExceptions();
            InitialiseSorts();
            InitialiseAgeFilter();
            InitialiseFeedCruds();
            _itemWrappersListCollectionView.Filter = ItemFilterDelegate;
        }
Run Code Online (Sandbox Code Playgroud)

在此示例中,当集合项上所谓的“FilterStatus”属性发生更改时,过滤谓词将立即在ITEM上调用,而不会出现耗时的“Refresh”方法的繁琐。

也可以看看 IsLiveFilteringRequested