2016-08-18 112 views
0

所以我有一個ListView控制支持ObservableCollection<>定期獲取項目添加到它。不過,我只想最多顯示前10項;即如果最多有10個項目顯示它們全部,則相應地調整大小,並且如果有多於10個項目則停止在第10個項目上顯示它們。限制在WPF中顯示項目的數量ListView

我想知道是否有合理的方法來做到這一點,因爲我目前的直覺是有第二個集合反映了ItemsSource的前10個項目,因此進行了更新。

+2

相反的另一資源集合,有什麼瞭解如何過濾收集只顯示前10個項目? – Pikoh

+0

我不確定我會如何去做。我需要維護底層的集合,所以我害怕我不知道如何綁定ListView的ItemsSource,或者如何過濾它的ItemsSource。 –

+0

[@Pikoh](http://stackoverflow.com/a/39016120/5177728)的想法是正確的,還有不錯的[文章](http://www.wpf-tutorial.com/listview-control/ listview-filtering /)與過濾示例。 – Sam

回答

1

你可以做這樣的事情(我沒有測試它,但你可能得到的想法):

_defaultView = CollectionViewSource.GetDefaultView(YourCollection); 
_defaultView.SortDescriptions.Add(new System.ComponentModel.SortDescription(".", System.ComponentModel.ListSortDirection.Ascending)); 
_defaultView.Filter = o => 
{ 
    int index = YourCollection.OrderBy(s => s).ToList().IndexOf(o as string); 
    return index >= 0 && index < 10; 
}; 
_defaultView.Refresh(); 
+0

我認爲應該去哪裏你收集變化(你說定期獲得項目添加,所以我認爲你應該這樣做後,發生) – Pikoh

+0

可能只有'刷新()'語句應該在集合變更處理程序,而所有視圖的初始化並且'Refresh')應該放在'InitializeComponent()'指令後的構造函數中。 – Sam

+0

好吧,我已經掌握了這個主要工作,但出現了一個新問題。每次添加對象時都會在每個對象上執行篩選,但是我需要做的是每次完全刷新整個集合的篩選 –