大多数WPF数据网格控件都具有内置功能,可以过滤显示的数据。我对使用该功能感兴趣,但与数据网格使用断开连接。
我希望找到一个用户控件,它将返回一个我可以在LINQ查询中使用的Expression<Func<T, bool>>
。有谁知道这样的用户控件?
答案 0 :(得分:5)
在WPF中,使用CollectionView
对内置控件进行过滤。然后将此CollectionView
指定为集合控件的ItemsSource
(从ItemsControl
派生的任何内容。)
从.NET 3.5 SP1开始,CollectionView
类的过滤器属性采用类型为Predicate<object>
的委托。 Predicate<object>
似乎与Func<object, bool>
基本相同,但两者并不直接兼容。您应该能够轻松创建Func<object, bool>
委托来包装Predicate<object>
委托。
public static Func<object, bool> GetFuncFromPred(Predicate<object> pred)
{
return (obj => pred.Invoke(obj));
}
您可以在CollectionView
中的过滤器上调用它,然后在LINQ查询中使用它们。
示例:
List<object> list = GetList();
CollectionView colView = new CollectionView(list);
ListBox lb = GetListBox();
lb.ItemsSource = colView;
colView.Filter = GetFilter();
var filteredItems = list.Where(GetFuncFromPred(colView.Filter));
答案 1 :(得分:0)
我不知道。我们必须建立自己的。
我们使用了CollectionViewSource并添加了默认过滤器以及使用自定义过滤器替换默认过滤器的功能。
答案 2 :(得分:0)
这是一个通用的,动态的,完整的XAML声明性itemscontrol过滤器用户控件。它可以过滤datagrid,listbox,combobox等...
该组件使用预编译的链接表达式来检索和比较对象值,以便提供非常好的性能。
希望这有帮助!