【发布时间】:2017-02-22 18:11:58
【问题描述】:
我有一个通过 CollectionViewSource 绑定到 ListView 的 ObservableCollection。我只想显示最新的 5 个条目。
我尝试过滤项目,但看起来过滤器只影响最后输入的项目。由于这是最新的,因此当然会显示出来。不知何故,在添加新项目后,所有项目都必须再次过滤。
谁能指点我一个解决方案。
这里有一些代码:
Public Class myItem
Dim TS as DateTime
End Class
Public myList as ObservableCollection(Of myItem)
XAML:
<CollectionViewSource Source="{Binding myList}" x:Key="cvs" Filter="MyCVS_Filter">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="TS" Direction="Descending"/>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
过滤器:
Private Sub MyCVS_Filter(sender As Object, e As FilterEventArgs)
Dim item As myItem = TryCast(e.Item, myItem)
Dim listcvs As CollectionViewSource = TryCast(sender, CollectionViewSource)
Dim list_view As IEnumerable(Of myItem) = TryCast(Listcvs.Source, IEnumerable(Of myItem)).OrderBy(Function(x) x.TS)
If (list_view.Count >= 4) AndAlso (list_view(4).TS >= item.TS) Then
e.Accepted = False
Else
e.Accepted = True
End If
End Sub
【问题讨论】: