WPF Verwenden mehrerer Filter in derselben ListCollectionView

Ich verwende das MVVM-Entwurfsmuster mit einer ListView, die an eine ListCollectionView im ViewModel gebunden ist. Ich habe auch mehrere Comboboxen, die zum Filtern der ListView verwendet werden. Wenn der Benutzer ein Element aus dem Kombinationsfeld auswählt, wird die ListView nach dem ausgewählten Element gefiltert. Wann immer ich über das, was bereits gefiltert wurde, filtern möchte, wird der vorherige Filter wie nie zuvor rückgängig gemacht. Gleiches gilt auch für das Entfernen eines Filters. Wenn Sie einen Filter für eine Combobox entfernen, werden alle Filter entfernt und die ursprüngliche Liste angezeigt. Ist es möglich, mehrere separate Filter in derselben ListCollectionView zu haben?

Mache ich etwas falsch oder wird dies einfach nicht unterstützt? Sie können einen Screenshot meiner Anwendung findenHier um zu sehen, was ich zu erreichen versuche. Hier ist mein Code zum Filtern ...

    /// <summary>
    /// Filter the list
    /// </summary>
    /// <param name="filter">Criteria and Item to filter the list</param>
    [MediatorMessageSink("FilterList", ParameterType = typeof(FilterItem))]
    public void FilterList(FilterItem filter)
    {
        // Make sure the list can be filtered...
        if (Products.CanFilter)
        {
            // Now filter the list
            Products.Filter = delegate(object obj)
            {
                Product product = obj as Product;

                // Make sure there is an object
                if (product != null)
                {
                    bool isFiltered = false;
                    switch (filter.FilterItemName)
                    {
                        case "Category":
                            isFiltered = (product.Category.IndexOf(filter.Criteria, StringComparison.CurrentCultureIgnoreCase)) != -1 ? true : false;
                            break;

                        case "ClothingType":
                            isFiltered = (product.ClothingType.IndexOf(filter.Criteria, StringComparison.CurrentCultureIgnoreCase)) != -1 ? true : false;
                            break;

                        case "ProductName":
                            isFiltered = (product.ProductName.IndexOf(filter.Criteria, StringComparison.CurrentCultureIgnoreCase)) != -1 ? true : false;
                            break;

                        default:
                            break;
                    }

                    return isFiltered;
                }
                else
                    return false;
            };
        }
    }

Antworten auf die Frage(2)

Ihre Antwort auf die Frage