Check out example codes for "wpf icollectionview filter". It will help you in understanding the concepts better.

Code Example 1

<Window xmlns=""
    <ListBox ItemsSource={Binding Customers} />

public class CustomerView
   public CustomerView()
        DataContext = new CustomerViewModel();
public class CustomerViewModel
    private ICollectionView _customerView;
    public ICollectionView Customers
        get { return _customerView; }
    public CustomerViewModel()
        IList<Customer> customers = GetCustomers();
        _customerView = CollectionViewSource.GetDefaultView(customers);
//The collection view adds support for selection tracking. 
//If you set the property IsSynchronizedWithCurrentItem to True 
//on the view that the collection is bound to, 
//it automatically synchronizes the current item of the CollectionView 
//and the View.
<ListBox ItemsSource="{Binding Customers}" IsSynchronizedWithCurrentItem="True" />

ICollectionView _customerView = CollectionViewSource.GetDefaultView(customers);
_customerView.Filter = CustomerFilter
 // filter
private bool CustomerFilter(object item)
    Customer customer = item as Customer;
    if(customer != null)
    	return customer.Name.Contains( _filterString );
    return false;

//If you change the filter criteria and you want to refresh the view, 
//you have to call Refresh() on the collection view
public string FilterString
  get { return _filterString; }
      _filterString = value; 

//Sorting data ascending or descending by one or multiple criterias 
//is a common requirement for viewing data. The collection view makes 
//it so easy to achieve this goal. Just add as many SortDescriptions 
//as you like to the CollectionView
ICollectionView _customerView = CollectionViewSource.GetDefaultView(customers);
                new SortDescription("LastName", ListSortDirection.Ascending );
                new SortDescription("FirstName", ListSortDirection.Ascending );

//The sorting technique explained above is really simple, but also quite 
//slow for a large amount of data, because it internally uses reflection. 
//But there is an alternative, more performant way to do sorting by 
//providing a custom sorter.

ListCollectionView _customerView = CollectionViewSource.GetDefaultView(customers);
                                         as ListCollectionView;
_customerView.CustomSort = new CustomerSorter(); 
public class CustomerSorter : IComparer
    public int Compare(object x, object y)
        Customer custX = x as Customer;
        Customer custY = y as Customer;
        return custX.Name.CompareTo(custY.Name);

Learn ReactJs, React Native from