如何递归过滤ObservableCollection

时间:2012-02-16 05:27:36

标签: c# wpf filtering

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

我需要能够递归过滤。

我目前拥有的是

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

    //foreach (Monitor monitor in Monitors)
    //   monitor.Children.Filter();
}

FilterOutZero函数根据监视器的状态返回true / false。

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

任何指导都将不胜感激。

2 个答案:

答案 0 :(得分:0)

将您的过滤器功能变为扩展方法和observablecollection?

public void Filter<T>(this ObservableCollection<T> collection)

答案 1 :(得分:0)

在Monitor类中创建属性Filter。 添加“监视器”过滤器时,将初始化此属性。 将此过滤器应用于Monitor

中的监视器
 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;

            }
        }