我有一个包含监视器列表的可观察集合。 每个监视器都能够包含一个可观察的监视器集合(创建树结构)。
我需要能够递归过滤。
我目前拥有的是
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。
我可以让它在可观察集合的第一级工作,但我正在努力过滤内部集合。
任何指导都将不胜感激。
答案 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;
}
}