Плавная прокрутка в пределах двух списков

У меня есть два сложенных списка с данными (первый ListBox содержит ‹10 элементов, второй может иметь до 5000 элементов), элементы первого списка должны быть вверху:

 <ScrollViewer >
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
 <RowDefinition Height="Auto"/>
 </Grid.RowDefinitions>
<Listbox IsScrollable="False"/>
<Listbox Grid.Row="1" IsScrollable="False"/>
 </ScrollViewer >

Как я могу улучшить производительность прокрутки?

Я знаю, что потерял виртуализациюPanel, когда вызываю «ScrollViewer.SetVerticalScrollBarVisibility (отправитель как ListBox, ScrollBarVisibility.Disabled);»

Но есть ли способ включить его, когда мне нужно два ListBox?


person SevenDays    schedule 12.08.2012    source источник


Ответы (1)


Почему вы не хотите использовать только один ListBox и устанавливать разные шаблоны для разных типов данных? Вам не нужно будет выполнять какую-либо дополнительную работу для повышения производительности прокрутки. Прочтите эту статью MSDN Обзор шаблонов данных. В примерах используется DataTemplateSelector, а в SL нет этого класса, но вы можете найти много сообщений в блогах, в которых делается попытка решить эту проблему в SL/WP: Реализация Windows Phone 7 DataTemplateSelector и CustomDataTemplateSelector. Итак, если вы будете использовать этот подход - вам просто нужно быть уверенным, что вы привязываетесь к своей коллекции, и ваша коллекция будет иметь правильный порядок элементов: 10 элементов из первого ListBox, остальные элементы из второго ListBox.

person outcoldman    schedule 12.08.2012
comment
Извините, но мне нужно, чтобы элементы из первого списка были вверху. Как это сделать? - person SevenDays; 12.08.2012
comment
Что ты имеешь в виду? Их не надо прокручивать? Или они всегда должны быть вверху списка? Просто правильно отсортируйте их в своей коллекции. - person outcoldman; 13.08.2012
comment
У меня есть джамплист, но ты прав. Я просто устанавливаю элементы первого литбокса как несимвольную группу и сортирую их. - person SevenDays; 13.08.2012