独立的WPF过滤器控件

问题描述:

大多数WPF数据网格控件都具有内置的过滤所示数据的功能。我对使用该功能感兴趣,但断开与数据网格的使用。独立的WPF过滤器控件

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

在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)); 
+0

嘿,谢谢,但我认为你的答案有点偏离正轨。我正在寻找一个WPF控件来提供表达式。 – NoizWaves 2009-04-20 22:32:43

+0

您可能会发现某人构建的自定义内容,但是没有内置WPF控件来执行此操作。抱歉。我正在解释如果你愿意,你可以自己做这件事。 – 2009-04-21 03:29:22

我不知道有什么。我们必须建立自己的。

我们使用了CollectionViewSource并添加了一个默认过滤器以及用自定义过滤器替换默认过滤器的功能。

+0

无赖。我在想这可能是要走的路。您是否可以构建使用泛型和反射的控件,或者为每个类创建硬编码的过滤器? – NoizWaves 2009-04-20 22:35:38

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

这是一个通用的,动态的,完整的XAML声明ItemsControl的过滤器的用户控制。它可以过滤数据网格,列表框,组合框等...

该组件使用预编译链接表达式来检索和比较对象值,因此它提供了相当不错的性能。

希望这会有所帮助!