Как отфильтровать ObservableCollection - PullRequest
0 голосов
/ 16 февраля 2012

У меня есть наблюдаемая коллекция, которая содержит список мониторов. С каждым монитором можно содержать наблюдаемую коллекцию мониторов (создать древовидную структуру).

Мне нужно иметь возможность фильтровать рекурсивно.

Что у меня сейчас есть

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 голосов
/ 16 февраля 2012

Создать свойство 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;

            }
        }
0 голосов
/ 16 февраля 2012

Сделать вашу функцию Filter в методе расширения наблюдаемой коллекцией?

public void Filter<T>(this ObservableCollection<T> collection)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...