2
我有一個ObservableCollection綁定到ListView通過CollectionViewSource。我只想顯示5個最新的條目。根據時間戳顯示WPF 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
這對我不起作用,看起來像過濾器只在LiveFilteringProperties更改時重新應用。我發現在CollectionViewSource上進行了一次刷新,然後再次爲每個Item執行過濾......我想我可以使用這個 – HaWe
是的,只有當TS屬性發生變化時纔會重新評估過濾器。另一個選項是調用Refresh()方法。我編輯了我的答案來澄清這一點。 – mm8