输入 CollectionViewSource
您可以做的一件事是通过 CollectionViewSource 将 ListBox 连接到您的项目。
您要做的就是在 XAML 中创建 collectionViewSource:
<Window.Resources>
<CollectionViewSource x:Key="cvsItems"/>
</Window.Resources>
在您的 CodeBehind 或 ViewModel 中连接到它
Dim cvsItems as CollectionViewSource
cvsItems = MyWindow.FindResource("cvsItems")
并将其源属性设置为您的项目集合。
cvsItems.Source = MyItemCollection
然后你就可以对其进行过滤。 collectionViewSource 维护集合中的所有项目,但根据您告诉它的内容更改这些项目的视图。
过滤
要进行过滤,请使用 CollectionViewSource 创建一个 CollectionView:
Dim MyCollectionView as CollectionView = cvsItems.View
接下来写一个过滤函数:
Private Function FilterDeleted(ByVal item As Object) As Boolean
Dim MyObj = CType(item, MyObjectType)
If MyObj.Deleted = True Then Return False Else Return True End If
End Function
最后,写一些让奇迹发生的东西:
MyCollectionView .Filter = New Predicate(Of Object)(AddressOf FilterDeleted)
我通常在可隐藏的扩展器中有复选框或单选按钮,可以让我来回更改过滤选项。这些绑定到属性,每个属性都运行过滤器函数,该函数评估所有过滤器,然后返回该项目是否应该出现。
让我知道这是否适合您。
Edit:
我差点忘了:
<ListBox ItemsSource="{Binding Source={StaticResource cvsItems}}"/>