2016-08-18 148 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

好吧,我已经掌握了这个主要工作,但出现了一个新问题。每次添加对象时都会在每个对象上执行筛选,但是我需要做的是每次完全刷新整个集合的筛选 –