WPF ListBox генерирует элементы как пользовательские свитки - PullRequest
3 голосов
/ 01 января 2012

Я пытаюсь использовать ListBox для отображения пользователю бесконечного списка опций.В настоящее время я просто вырезаю список в произвольной точке, но я бы хотел, чтобы пользователь мог прокручивать страницу вниз так, как ему хочется.Кроме того, я хочу избегать генерации невидимых элементов в максимально возможной степени, так как для генерации каждого элемента должны быть выполнены некоторые вычисления.

Я пытался написать listBox.ItemsSource = enumerable, ожидая, что он будет запрашивать у перечисляемого только видимые элементы,но вместо этого он пытается прочитать все элементы, что вызывает бесконечный цикл, если элементов бесконечно много.

Моя лучшая идея - добавить прослушиватель, который получает уведомление при прокрутке вниз ListBox, и добавлять новые элементы, такие какчто всегда есть k больше элементов после последнего видимого элемента (где k - это, вероятно, количество элементов, видимых за раз, так что работает Page Down).

Есть ли какой-нибудь более чистый способ справиться с этим?

1 Ответ

7 голосов
/ 01 января 2012

Я бы использовал VirtualizingStackPanel, чтобы пользовательский интерфейс рисовал меньше элементов, а затем использовал бы метод виртуализации данных, чтобы ограничить данные, которые вы храните в памяти. Подробнее здесь (особенно записи в блоге Беа Стольница, на которые есть ссылка)

...