C# 基于其他列筛选器选择的WPF DataGrid筛选器

C# 基于其他列筛选器选择的WPF DataGrid筛选器,c#,wpf,datagrid,C#,Wpf,Datagrid,我有一个包含3列的DataGrid,每个列都有一个filter按钮,用于显示包含复选框项的列表框 我的DataGrid的每一列过滤器本身都和我预期的一样好。但是,我的问题是,现在我无法让我的DataGrid正确过滤。每个列筛选器都覆盖另一个列筛选器。换句话说。。。如果我从ColumnHeader1中选择过滤器项,然后从ColumnHeader2中选择过滤器项,那么ColumnHeader1中的过滤器将被覆盖事件,尽管它们在GUI中仍然显示为选中状态 在我的MainWindow.xaml.cs中,

我有一个包含3列的DataGrid,每个列都有一个filter按钮,用于显示包含复选框项的列表框

我的DataGrid的每一列过滤器本身都和我预期的一样好。但是,我的问题是,现在我无法让我的DataGrid正确过滤。每个列筛选器都覆盖另一个列筛选器。换句话说。。。如果我从ColumnHeader1中选择过滤器项,然后从ColumnHeader2中选择过滤器项,那么ColumnHeader1中的过滤器将被覆盖事件,尽管它们在GUI中仍然显示为选中状态

在我的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
扩展方法。我的问题是:如何让所有这些列表协同工作,以便我的DataGRid能够正确过滤