我想使用我编写的过滤器过滤一个collectionviewsource,但我不确定如何将过滤器应用到它?
这是我的收藏视图来源:
<Grid.Resources>
<CollectionViewSource x:Key="myCollectionView"
Source="{Binding Path=Query4, Source={x:Static Application.Current}}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="ContactID"
Direction="Descending"/>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</Grid.Resources>
我已经实现了一个过滤器:
Private Sub WorkerFilter(ByVal sender As Object, ByVal e As FilterEventArgs)
Dim value As Object = CType(e.Item, System.Data.DataRow)("StaffSection")
If (Not value Is Nothing) And (Not value Is DBNull.Value) Then
If (value = "Builder") Or (value = "Office Staff") Then
e.Accepted = True
Else
e.Accepted = False
End If
End If
End Sub
那么如何在加载时通过过滤器过滤CollectionViewSource?你能不能给我需要的所有代码(我只想几行),因为我对编码很新。
谢谢你们
编辑:记录,
<CollectionViewSource x:Key="myCollectionView" Filter="WorkerFilter" ... />
给我错误:
对象初始化失败 (ISupportInitialize.EndInit)。 'System.Windows.Data.BindingListCollectionView' 视图不支持过滤。 对象'myCollectionView'
出错
答案 0 :(得分:1)
我对WPF Coding awswell相对较新。以下是我建议您尝试的内容:
制作过滤功能如下:
Public Function FilterList(item As Object) As Boolean
Dim value as Object = item
If (Not value Is Nothing) And (Not value Is DBNull.Value) Then
If (value = "Builder") Or (value = "Office Staff") Then
Return True
Else
Return False
End If
End If
End Function
从Window_Loaded事件中调用该函数:
Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles MainWindow.Loaded
MyCollectionView = CollectionViewSource.GetDefaultView(Query4) 'May not be needed, IDK
MyCollectionView.Filter = New Predicate(Of Object)(AddressOf FilterList)
End Sub
如果这不起作用,请告诉我(可能需要一些调整:D)
答案 1 :(得分:0)
您只需要在XAML中附加事件:
<CollectionViewSource x:Key="myCollectionView" Filter="WorkerFilter" ...>
答案 2 :(得分:0)
我有同样的问题,直到我决定做以下事情并且运作良好,我不知道缺点是什么:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:data="clr-namespace:System.Windows.Data;assembly=PresentationFramework">
<CollectionViewSource
x:Key="FilteredBindingListCollection"
CollectionViewType="{x:Type data:ListCollectionView}" />
</Window>
希望这有用。