2016-08-18 9 views
0

Итак, у меня есть элемент управления ListView при поддержке ObservableCollection<>, который периодически получает элементы, добавленные к нему. Однако я бы хотел показать не более 10 первых элементов; то есть, если их не более 10 элементов, они отображают их все, при изменении размера соответственно, и если их больше 10, они перестают отображать их на 10-м элементе.Ограничить количество отображаемых элементов в WPF ListView

Мне было интересно, был ли разумный способ сделать это, поскольку моя текущая интуиция состоит в том, чтобы иметь вторую коллекцию, которая отражает 10 лучших элементов ItemsSource, соответственно обновляя их.

+2

Вместо второго сбора, что о фильтрации вашей коллекции, чтобы показать только первые 10 пунктов ? – Pikoh

+0

Я не уверен, как бы я это сделал. Мне нужно поддерживать базовую коллекцию, поэтому, боюсь, я не знаю, что связать с элементом ItemsSource ListView или как фильтровать имеющийся у них ItemSource. –

+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()' должен находиться внутри обработчика изменений коллекции, а инициализация всех представлений (а также 'Refresh') следует поместить в конструктор после команды InitializeComponent(). – Sam

+0

Итак, у меня это в основном работает, но возникает новая проблема. Фильтрация выполняется на каждом объекте по мере добавления каждого объекта, однако то, что мне нужно, это полностью обновить фильтрацию всей коллекции каждый раз. –

Смежные вопросы