向谓词列表添加多个条件

时间:2015-12-24 09:07:39

标签: c# wpf predicate

我有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 == 1Companies列表CurrentStatus == 0的列表。但是,如果Companies CheckBoxesCurrentStatus == 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以同时允许两者?

1 个答案:

答案 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 ) ) );
}