В 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));
Эй, спасибо, но я думаю, что ваш ответ немного отстает. Я ищу WPF-элемент управления для выражения. – NoizWaves
Вы можете найти пользовательский, который кто-то создал, но нет встроенного в WPF-элемента управления, который делает это. Сожалею. Я объяснял, как вы могли бы сделать это сами, если бы захотели. –