C# 如何重新过滤可观察到的收集

C# 如何重新过滤可观察到的收集,c#,wpf,filtering,C#,Wpf,Filtering,我有一个可观察的集合,其中包含一个监视器列表。 每个监视器都能够包含一个可观察的监视器集合(创建树结构) 我需要能够递归过滤 我现在拥有的是 public void Filter() { ICollectionView collectionView = CollectionViewSource.GetDefaultView(Monitors); collectionView.Filter = new Predicate<object>(FilterOutZero);

我有一个可观察的集合,其中包含一个监视器列表。 每个监视器都能够包含一个可观察的监视器集合(创建树结构)

我需要能够递归过滤

我现在拥有的是

public void Filter()
{
    ICollectionView collectionView = CollectionViewSource.GetDefaultView(Monitors);
    collectionView.Filter = new Predicate<object>(FilterOutZero);

    //foreach (Monitor monitor in Monitors)
    //   monitor.Children.Filter();
}
public void过滤器()
{
ICollectionView collectionView=CollectionViewSource.GetDefaultView(监视器);
collectionView.Filter=新谓词(FilterOutZero);
//foreach(监视器中的监视器)
//monitor.Children.Filter();
}
FilterOutZero函数根据监视器的状态返回真/假

我可以让它在可观察集合的第一级工作,但我正在努力过滤内部集合


任何指导都将不胜感激。

将您的过滤功能扩展为可观察的集合

public void Filter<T>(this ObservableCollection<T> collection)
public void过滤器(此ObservableCollection集合)

在监视器类中创建属性筛选器。 此属性在添加监控器过滤器时初始化。 将此筛选器应用于监视器内部的监视器

 public class Monitor
    {
        private Predicate<object> _filter;
        public Predicate<object> Filter
        {
            get { return _filter; }
            set 
            {
                _filter = value;
                ICollectionView collectionView = CollectionViewSource.GetDefaultView(test);
                collectionView.Filter = new Predicate<object>(_filter);
            }
        }
        public ObservableCollection<Monitor> monitor{ get; set; }

            }

public void Filter()
        {
            ICollectionView collectionView = CollectionViewSource.GetDefaultView(Monitors);
            collectionView.Filter = new Predicate<object>(FilterOutZero);
            foreach (var l in Monitors)
            {
                l.Filter = collectionView.Filter;

            }
        }
公共类监视器
{
私有谓词过滤器;
公共谓词过滤器
{
获取{return\u filter;}
设置
{
_过滤器=值;
ICollectionView collectionView=CollectionViewSource.GetDefaultView(测试);
collectionView.Filter=新谓词(\u Filter);
}
}
公共ObservableCollection监视器{get;set;}
}
公共空过滤器()
{
ICollectionView collectionView=CollectionViewSource.GetDefaultView(监视器);
collectionView.Filter=新谓词(FilterOutZero);
foreach(监视器中的var l)
{
l、 Filter=collectionView.Filter;
}
}

如何处理过滤器的结果?