Search code examples
wpfobservablecollectionicollectionview

Filtering two ICollectionView from a single ObservableCollection


I have a problem using two ICollectionView instances that have the same ObservableCollection as source.

When I filter an ICollectionView, it seems that also the other ICollectionView is filtered with the same filter. I instantiate the ICollectionView with the method CollectionViewSource.GetDefaultView.

Is this the expected behaviour? I don't think so, but maybe I'm missing something.

This is the constructor of the ViewModel:

ListaVoci = CollectionViewSource.GetDefaultView(RootVM.CollectionVociCE);

where ListaVoci is an ICollectionView and RootVM.CollectionVociCE is an ObservableCollection. I have two different user controls that have two different instances of this ViewModel.

This is the constructor of the user control:

datacontext.ListaVoci.Filter = FiltraListaVoci;

where FiltraListaVoci is

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

Solution

  • Ok, I solved the problem :) with CollectionViewSource.GetDefaultView() I get the same view instance for both the two ICollectionViews, so that they reference the same object. The right way to instantiate the ICollectionView in this case is this:

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

    So I create a Collectionviewsource object whenever the constructor is called. I hope that this doesn't lead to some strange side effects :) Thank you anyway!