paul
paul

Reputation: 13516

How to define 2 separate filters on one Collection?

I have a collection which is appearing in 2 separate lists. One list should show all the items (unfiltered) and the second list should show the items which match a certain criterion (filtered).

The 2 list's ItemsSource Properties are bound to 2 Properties in the ViewModel.

I tried to set a DefaultView for the filtered list but it affects both lists.

ListCollectionView view = (ListCollectionView) CollectionViewSource.GetDefaultView(_manager.Modules);
view.Filter = delegate(object item)
{
    Model.BaseModule bm = item as Model.BaseModule;
    if (bm != null)
    {
        return bm is TemplatedUnitOfTest && ((TemplatedUnitOfTest)bm).TemplateGuid == _uot.Header.Id;
    }
    return false;
};

How should I do this?

Upvotes: 1

Views: 60

Answers (1)

Dan Puzey
Dan Puzey

Reputation: 34198

Instead of changinge the default view, explicitly create two separate instances of ListCollectionView, filter one, and bind each list to the relevant view.

An ItemsControl (or derivative) will always wrap its Items collection in a CollectionView before displaying anyway - if you do this step yourself then you have more control over what's displayed.

Upvotes: 3

Related Questions