Автономное управление фильтрами WPF - PullRequest
1 голос
/ 20 апреля 2009

Большинство элементов управления сеткой данных WPF имеют встроенную возможность фильтрации отображаемых данных. Я заинтересован в использовании этой функциональности, но отключаюсь от использования сетки данных.

Я надеюсь найти пользовательский элемент управления, который вернет Expression<Func<T, bool>>, который я могу использовать в запросе LINQ. Кто-нибудь знает такой пользовательский элемент управления?

Ответы [ 3 ]

5 голосов
/ 20 апреля 2009

В 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 голосов
/ 08 апреля 2011

Вы можете попробовать это: http://dotnetexplorer.blog.com/2011/04/07/wpf-itemscontrol-generic-staticreal-time-filter-custom-control-presentation/

Это общий, динамический, полный XAML декларативный пользовательский элемент управления фильтрами элементов управления. Может фильтровать сетку данных, списки, выпадающие списки и т. Д. *

Компонент использует предварительно скомпилированное выражение ссылки для получения и сравнения значений объектов, поэтому он предлагает довольно хорошие характеристики.

Надеюсь, это поможет!

0 голосов
/ 20 апреля 2009

Я не знаю ни одного. Мы должны были построить свой собственный.

Мы использовали CollectionViewSource и добавили фильтр по умолчанию, а также возможность заменить по умолчанию пользовательский фильтр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...