2015-12-24 2 views
0

У меня есть 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 AND CurrentStatus == 1.

Я попытался добавить это, но он не работает как с CheckBoxes checked;

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, чтобы разрешить оба?

+1

Вы можете попробовать 'criteria.Add (новый предиката (х => (x.CurrentStatus == 1 || x.CurrentStatus == 0)))' для обоих проверяется. – bars222

+0

@ bars222, к сожалению, использование этого результата по-прежнему не приводит к тому, что в 'DataGrid' не отображаются' Компании' – CBreeze

+0

Также вы должны добавить код в предыдущие инструкции 'if'. if (currentCheckBox.IsChecked == true && nonCurrentCheckBox.IsChecked == false) – bars222

ответ

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))); 
} 
Смежные вопросы