William
William

Reputation: 6546

CollectionViewSource filter is slow

The filtering become slow when the list is large. Is there a faster way to process the filter ? Currently this is what I have.

CollectionViewSource orderListCVS;

private void showCompletedRB(object sender, RoutedEventArgs e)
{
    CollectionView coll = orderListCVS.View as CollectionView;
    coll.Filter = null;
    orderListCVS.Filter += new FilterEventHandler(showCompletedFilter);
}

private void showCompletedFilter(object sender, FilterEventArgs e)
{
    Order order = e.Item as Order;
    if (order != null)
    {
        e.Accepted = (order.Status == Data.Status.Done);
    }
}

Upvotes: 1

Views: 2537

Answers (1)

Bruno
Bruno

Reputation: 1974

Have you tried this way :

public partial class MainWindow : Window
{
    private ICollectionView orderListCVS;

    private List<Order> orders;

    public MainWindow()
    {
        InitializeComponent();
        orders = new List<Order>();
        orderListCVS = CollectionViewSource.GetDefaultView(orders);
    }
    private bool showCompletedFilter(object sender)
    {
        Order order = sender as Order;
        if (order != null)
        {
            return order.Status == Data.Status.Done;
        }

        return false;
    }

    private void showCompletedRB(object sender, RoutedEventArgs e)
    {
        orderListCVS.Filter = showCompletedFilter;
    }
}

This is the most common way to use collectionView.

Upvotes: 1

Related Questions