This code isn't an implementation of ICollectionView
. It just uses default implementation, obtained through CollectionViewSource.GetDefaultView
.
You can cache obtained ICollectionView
, there's no need to assign it every time you want to change the filter:
private ICollectionView _advFilter;
public MainViewModel()
{
// assuming that Adventurers is ObservableCollection<Adventurer>
_advFilter = CollectionViewSource.GetDefaultView(Adventurers);
AdvNoFilter();
}
public void ShowEmployedExecute()
{
AdvFilter(AdvStatus.Employed);
}
public void ShowAvailableExecute()
{
AdvFilter(AdvStatus.Available);
}
void AdvFilter(AdvStatus status)
{
_advFilter.Filter = adv => ((Adventurer)adv).Status.Equals(status);
_advFilter.Refresh();
}
void AdvNoFilter()
{
_advFilter.Filter = null;
_advFilter.Refresh();
}