Фильтрация двух ICollectionView из одного ObservableCollection

У меня проблема с использованием двух экземпляров ICollectionView, которые имеют одинаковый ObservableCollection в качестве источника.

Когда я фильтрую ICollectionView, кажется, что и другие ICollectionView фильтруются тем же фильтром. Я создаю экземпляр ICollectionView с помощью метода CollectionViewSource.GetDefaultView.

Это ожидаемое поведение? Я так не думаю, но, возможно, я что-то упускаю.

Это конструктор ViewModel:

ListaVoci = CollectionViewSource.GetDefaultView(RootVM.CollectionVociCE);

где ListaVoci — это ICollectionView, а RootVM.CollectionVociCE — это ObservableCollection. У меня есть два разных пользовательских элемента управления, которые имеют два разных экземпляра этой ViewModel.

Это конструктор пользовательского элемента управления:

datacontext.ListaVoci.Filter = FiltraListaVoci;

где FiltraListaVoci

public bool FiltraListaVoci(object filter)
{
    // I make some filtering
}

person Giacomo Tagliabue    schedule 27.12.2011    source источник
comment
Можете ли вы поделиться своим кодом, чтобы увидеть больше контекста?   -  person bobbymcr    schedule 27.12.2011
comment
Вы можете добавить это как ответ на свой вопрос и принять его; это может быть полезно для будущего посетителя.   -  person bobbymcr    schedule 27.12.2011
comment
я добавил решение, которое я обнаружил :)   -  person Giacomo Tagliabue    schedule 27.12.2011
comment
я не могу ответить ни на один свой пост, потому что я нуб :) мне нужно ждать 8 часов ... я добавлю его, когда смогу, а пока я добавил ответ, отредактировав свой вопрос   -  person Giacomo Tagliabue    schedule 27.12.2011


Ответы (1)


Хорошо, я решил проблему :) с помощью CollectionViewSource.GetDefaultView() я получаю один и тот же экземпляр представления для обоих ICollectionView, так что они ссылаются на один и тот же объект. Правильный способ создания экземпляра ICollectionView в этом случае таков:

CollectionViewSource cvs = new CollectionViewSource();
cvs.Source = RootVM.CollectionVociSP;
ListaVoci = cvs.View;

Поэтому я создаю объект Collectionviewsource всякий раз, когда вызывается конструктор. Я надеюсь, что это не приведет к каким-то странным побочным эффектам :) Все равно спасибо!

person Giacomo Tagliabue    schedule 28.12.2011