我有一个 ListBox,我正在加载三种类型的对象,这些对象都继承自同一个父类型。我想使用 CollectionViewSource 根据它们的类型过滤掉 ListBox 中的对象,但是我在编写过滤器时遇到了麻烦。
我的 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;
现在我想编写一个过滤器,它只会根据用户将在 UI 中单击的复选框显示某种类型的对象。
以下是编写一个过滤器的失败尝试:
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 中不存在的默认视图。我看过的一个这样的教程可以在这里找到
任何提示表示赞赏!