Я нашел пример кода MSDN для получения представления коллекции по умолчанию и добавления фильтра к представлению, но большая его часть предназначена для .Net 4.0. Я в команде, которая в настоящее время не переключается на 4.0, поэтому у меня нет такой возможности. Ни один из найденных примеров не использовал DataTable в качестве источника, поэтому мне пришлось немного его адаптировать. Я использую DataTable, потому что данные поступают из БД, и их легко заполнить. После попытки реализовать примеры MSDN я получаю «NotSupportedException» при попытке установить фильтр. Это код C # у меня есть:
защищенный DataTable _data = new DataTable ();
защищенный BindingListCollectionView _filteredDataView;
...
private void On_Loaded (Отправитель объекта, RoutedEventArgs e)
{
_filteredDataView = (BindingListCollectionView) CollectionViewSource.GetDefaultView (_data);
_filteredDataView.Filter = new Predicate (MatchesCurrentSelections); // выбрасывает NotSupportedException
}
...
public bool MatchesCurrentSelections (объект o) {...}
Кажется, что либо BindingListCollectionView не поддерживает фильтрацию в .Net 3.5, либо он просто не работает для DataTable. Я смотрел на настройку в XAML вместо кода C #, но примеры XAML используют коллекции в ресурсах вместо коллекции, которая является членом класса, поэтому я понятия не имею, как это настроить. Кто-нибудь знает, как отфильтровать представление в DataTable?
Редактировать
Я перестал изучать это некоторое время назад, думал, что обновлю свой вопрос. Я не мог заставить встроенную фильтрацию работать. Похоже, было бы намного проще с .NET 4.0, я прибегал к повторному запросу данных с различными условиями каждый раз, когда требуемая фильтрация изменяется. В среде моего приложения это работает хорошо и очень быстро.