微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 ICollectionview 在 ObservableCollection 中搜索和过滤数据

如何解决使用 ICollectionview 在 ObservableCollection 中搜索和过滤数据

我在ICollectionView中使用ObservableCollection进行搜索 程序运行良好,可以进行搜索操作

public ICollectionView ItemsView => CollectionViewSource.Getdefaultview(DataList);
ItemsView.Filter = o => Filter(o as PackageModel);

private bool Filter(PackageModel item)
        {
            return SearchText == null
                       || item.Name.IndexOf(SearchText,StringComparison.OrdinalIgnoreCase) != -1
                       || item.Publisher.IndexOf(SearchText,StringComparison.OrdinalIgnoreCase) != -1;

        }

现在我想过滤数据网格中的数据例如带有IsInstalled = true

的项目
public bool IsShowOnlyInstalledApps
        {
            get => _isShowOnlyInstalledApps;
            set
            {
                SetProperty(ref _isShowOnlyInstalledApps,value);
                if (value)
                {
                    var filter = new Predicate<object>(item => ((PackageModel)item).IsInstalled);
                    ItemsView.Filter = filter;
                }
                else
                {
                    ItemsView.Filter = null;
                }
            } 
        }

我可以看到数据网格中的项目被过滤了但搜索操作不再有效

解决方法

使用这个:

return SearchText == null
                       || (item.Name.IndexOf(SearchText,StringComparison.OrdinalIgnoreCase) != -1)
                       || (item.Publisher.IndexOf(SearchText,StringComparison.OrdinalIgnoreCase) != -1);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。