【问题标题】:How to filter ObservableCollection resursively如何递归过滤 ObservableCollection
【发布时间】:2012-03-07 12:59:21
【问题描述】:

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

我需要能够递归过滤。

我目前拥有的是

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

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

FilterOutZero 函数根据监视器的状态返回真/假。

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

任何指导将不胜感激。

【问题讨论】:

  • 过滤结果如何处理?

标签: c# wpf filtering


【解决方案1】:

在 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;

            }
        }

【讨论】:

    【解决方案2】:

    把你的过滤器函数变成一个可观察集合的扩展方法?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-17
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多