Фильтр сетки данных WPF на основе других выбранных фильтров столбцов

#c# #wpf #datagrid

#c# #wpf #сетка данных

Вопрос:

У меня есть сетка данных с 3 столбцами, и в каждом из них есть кнопка фильтра, которая выводит список, содержащий элементы флажка.

Сами по себе фильтры каждого столбца моей сетки данных были такими, как я и ожидал. Но моя проблема в том, что теперь я не могу заставить свою сетку данных правильно фильтровать. Каждый фильтр столбца переопределяет другой. Другими словами … если я выбираю элементы фильтра из ColumnHeader1, а затем выбираю элементы фильтра из ColumnHeader2, то фильтры из ColumnHeader1 переопределяются событием, хотя они по-прежнему отображаются выбранными в графическом интерфейсе.

В моем MainWindow.xaml.cs я использую ICollectionView объект и добавляю DataGrid.ItemSource к нему свой.

Вот где у меня возникла проблема, и это мой OnFilterTriggered метод:

 public bool OnFilterTriggered(object item)
        {
            // Get the list of all the filter columns
            var filter_list_1_selected = FilterListOne.Where(filterItem => filterItem.IsChecked == true).Select(filter => filter.Name).ToList();
            var filter_list_2_selected = FilterListTwo.Where(filterItem => filterItem.IsChecked == true).Select(filter => filter.Name).ToList();
            var filter_list_3_selected = FilterListThree.Where(filterItem => filterItem.IsChecked == true).Select(filter => filter.Name).ToList();

            if (filter_list_1_selected.Count > 0 || 
                filter_list_2_selected.Count > 0 ||
                filter_list_3_selected.Count > 0)
            {
                if (item is MyDataRowModel dataRow)
                {
                    return (filter_list_1_selected.Contains(dataRow.Name) 
                        || filter_list_2_selected.Contains(dataRow.CustomerId) 
                        || filter_list_3_selected.Contains(dataRow.Status));
                }
            }
            else
            {
                return true;
            }

            return false;
        }
  

Каждая из этих строк имеет строковые значения, поэтому я использую метод Contains расширения. Мой вопрос заключается в следующем: как мне заставить весь этот список работать в тандеме, чтобы моя сетка данных правильно фильтровала?