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