【发布时间】:2016-04-21 06:37:38
【问题描述】:
我目前正在根据一组 CheckBox 的选择来过滤 DataGrid。 Criteria 被添加到 Criteria 列表中,并且 DataGrid 绑定到的 ICollectionView 被适当地过滤。
如果我想在“AND”基础上进行过滤,这可以正常工作。每个工作都有一个与之关联的员工,但目前过滤器通过说show jobs where job.employee = employee 1 AND job.employee = employee2 起作用。这是目前的代码,它会像这样过滤;
criteria.Clear();
if (yourJobsCheckBox.IsChecked == true)
{
criteria.Add(new Predicate<JobModel>(x => x.ITName == yourJobsCheckBox.Tag.ToString()));
}
if (danJobsCheckBox.IsChecked == true)
{
criteria.Add(new Predicate<JobModel>(x => x.ITName == danJobsCheckBox.Tag.ToString()));
}
if (emilyJobsCheckBox.IsChecked == true)
{
criteria.Add(new Predicate<JobModel>(x => x.ITName == emilyJobsCheckBox.Tag.ToString()));
}
if (adamJobsCheckBox.IsChecked == true)
{
criteria.Add(new Predicate<JobModel>(x => x.ITName == adamJobsCheckBox.Tag.ToString()));
}
JobModel job = o as JobModel;
bool isIn = true;
if (criteria.Count() == 0)
return isIn;
isIn = criteria.TrueForAll(x => x(job));
return isIn;
目前正在按ITName = tag1 AND ITName = tag2etc 的职位进行过滤。等等。一个工作永远不会有超过一个员工分配给它,所以一旦用户点击多个 CheckBox,就不可避免地不会显示任何工作。
如何更改我的过滤器,以便它以“或”为基础进行过滤?例如show jobs where job.employee = employee 1 OR job.employee = employee 2
【问题讨论】:
-
TrueForAll有对应的TruForAny方法吗?在这个可行的简单情况下,或者对于更复杂的情况(AND and OR),您可以使用this predicate builder -
@stuartd 不幸的是它没有!
标签: c# wpf filter datagrid icollectionview