#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
расширения. Мой вопрос заключается в следующем: как мне заставить весь этот список работать в тандеме, чтобы моя сетка данных правильно фильтровала?