У меня есть ListBox, который я загружаю объектами трех типов, которые наследуются от одного и того же родительского типа. Я хотел бы отфильтровать объекты в ListBox на основе их типа с помощью CollectionViewSource, но у меня возникли проблемы с написанием фильтров.
Мой XAML выглядит следующим образом:
<UserControl.Resources>
<CollectionViewSource x:Key="eventsViewSource"
Source="{Binding lifeCycleEvents}" >
<CollectionViewSource.SortDescriptions>
<compMod:SortDescription PropertyName="Date" Direction="Ascending"/>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</UserControl.Resources>
<ListBox Name="lstEventHistory" ItemsSource="{Binding Source={StaticResource eventsViewSource}}">
...
</ListBox>
В коде программной части я загружаю наблюдаемую коллекцию объектов, возвращаемых вызовом асинхронного метода:
private ObservableCollection<LifeCycleEvent> lifeCycleEvents;
...
lifeCycleEvents= e.Result;
CollectionViewSource eventsViewSource = this.Resources["eventsViewSource"] as CollectionViewSource;
eventsViewSource.Source = lifeCycleEvents;
Теперь я хотел бы написать фильтр, который будет отображать только объекты определенного типа на основе флажков, которые пользователь будет щелкать в пользовательском интерфейсе.
Ниже приведена неудачная попытка написать один фильтр:
eventsViewSource.Filter = new Predicate<object>(rmaFilter);
public bool rmaFilter(object item)
{
if(item.GetType() == typeof(RmaEvent))
return true;
else
return false;
}
Это дает следующую ошибку: «Событие System.Windows.Data.CollectionViewSrouce.Filter может отображаться только слева от += или -=".
Я не смог найти ни одного учебника, который делает именно то, что мне нужно. Те, которые существуют, зависят от представления по умолчанию, которого нет в Silverlight. Один из таких уроков, который я просмотрел, можно найти здесь
Любые советы приветствуются!