WPF ListBox генерирует элементы как пользовательские свитки

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

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

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

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

1 ответ

Решение

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

Другие вопросы по тегам