我有Companies
我尝试使用criteria
进行过滤。每个Company
都有CurrentStatus
,每次用户检查CheckBox
以定义过滤器时,都会调用过滤方法。除了一件事,我目前几乎完全按照我的要求工作。这就是我的意思;
private void FilterCompanyType(object sender, RoutedEventArgs e)
{
criteria.Clear();
if (currentCheckBox.IsChecked == true)
{
criteria.Add(new Predicate<CompanyModel>(x => x.CurrentStatus == 1));
}
if (nonCurrentCheckBox.IsChecked == true)
{
criteria.Add(new Predicate<CompanyModel>(x => x.CurrentStatus == 0));
}
foreach (CheckBox checkBox in companyFilters.Children)
{
if (!CheckCheckBoxes())
{
dataGrid.ItemsSource = null;
compDetailsLabel.Content = string.Empty;
}
else
{
dataGrid.ItemsSource = CompanyICollectionView;
CompanyICollectionView.Filter = dynamic_Filter;
SetSelectedCompany(selectedIndex);
dataGrid.SelectedIndex = 0;
}
}
}
正如我所说这样做正常,它适用于用户想要查看Companies
列表CurrentStaus == 1
或Companies
列表CurrentStatus == 0
的列表。但是,如果Companies
CheckBoxes
和CurrentStatus == 0
中的CurrentStatus == 1
都已选中,则目前用户无法看到CheckBoxes
列表。
我尝试添加此功能,但它不适用于if (nonCurrentCheckBox.IsChecked == true && currentCheckBox.IsChecked == true)
{
criteria.Add(new Predicate<CompanyModel>(x => x.CurrentStatus == 0));
criteria.Add(new Predicate<CompanyModel>(x => x.CurrentStatus == 1));
}
已检查;
DataGrid
这只会返回一个空的Predicate
。如何更改import
以同时允许两者?
答案 0 :(得分:0)
如果我清楚地理解,if
陈述应该是这样的。
if ( currentCheckBox.IsChecked == true && nonCurrentCheckBox.IsChecked == false )
{
criteria.Add( new Predicate<CompanyModel>( x => x.CurrentStatus == 1 ) );
}
else if ( nonCurrentCheckBox.IsChecked == true && currentCheckBox.IsChecked == false )
{
criteria.Add( new Predicate<CompanyModel>( x => x.CurrentStatus == 0 ) );
}
else if ( nonCurrentCheckBox.IsChecked == true && currentCheckBox.IsChecked == true )
{
criteria.Add( new Predicate<CompanyModel>( x => ( x.CurrentStatus == 0 || x.CurrentStatus == 1 ) ) );
}