独立WPF过滤器控制

时间:2009-04-20 16:38:14

标签: c# wpf linq user-controls

大多数WPF数据网格控件都具有内置功能,可以过滤显示的数据。我对使用该功能感兴趣,但与数据网格使用断开连接。

我希望找到一个用户控件,它将返回一个我可以在LINQ查询中使用的Expression<Func<T, bool>>。有谁知道这样的用户控件?

3 个答案:

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

您可能想尝试:http://dotnetexplorer.blog.com/2011/04/07/wpf-itemscontrol-generic-staticreal-time-filter-custom-control-presentation/

这是一个通用的,动态的,完整的XAML声明性itemscontrol过滤器用户控件。它可以过滤datagrid,listbox,combobox等...

该组件使用预编译的链接表达式来检索和比较对象值,以便提供非常好的性能。

希望这有帮助!