繁体   English   中英

如何递归过滤ObservableCollection

[英]How to filter ObservableCollection resursively

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

我需要能够递归过滤。

我现在有的是

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。

我可以将其用于可观察集合的第一级,但是我正在努力筛选内部集合。

任何指导将不胜感激。

使您的Filter函数成为扩展方法的可观察集合?

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

在Monitor类中创建一个属性Filter。 添加监视器筛选器时,将初始化此属性。 将此过滤器应用于Monitor内部的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;

            }
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM