John Oxley
John Oxley

Reputation: 15010

Get filtered items from a CollectionView

I have a ListCollectionView which has had a filter applied to it. In order to get the filtered items from the list (e.g. to write to a file), is there a clean way of doing it.

My current solution is

var filteredItems = originalCollection.Where(i => view.Filter(i));

In the code I do check for nulls on originalCollection and view.Filter.

Is there a cleaner way of doing this?

Upvotes: 31

Views: 21534

Answers (2)

XavrasX
XavrasX

Reputation: 41

Here is full example how to get filtrated items from DataGrid:

ICollectionView view = CollectionViewSource.GetDefaultView(*yourDataGrid*);
foreach(Foo o in view)
{
  ...
}

Upvotes: 0

Thomas Levesque
Thomas Levesque

Reputation: 292685

The GetEnumerator method takes the filter into account, so you can just foreach over the view:

ICollectionView view = ...
view.Filter = ...

foreach(Foo o in view)
{
    ...
}

(assuming the objects in the original collection are of type Foo).

You can also use the Cast extension method:

var filteredItems = view.Cast<Foo>();

Upvotes: 52

Related Questions