WPF ListBox генерирует элементы как пользовательские свитки
Я пытаюсь использовать ListBox
для отображения возможно бесконечного списка опций для пользователя. В настоящее время я просто вырезаю список в произвольной точке, но я бы хотел, чтобы пользователь мог прокручивать страницу вниз так, как ему хочется. Кроме того, я хочу избегать генерации невидимых элементов в максимально возможной степени, так как для генерации каждого элемента необходимо выполнить некоторые вычисления.
Я пытался писать listBox.ItemsSource = enumerable
ожидая, что он запросит только перечисляемое для видимых элементов, но вместо этого он пытается прочитать все элементы, что вызывает бесконечный цикл, если элементов бесконечно много.
Моя лучшая идея - добавить слушателя, который получит уведомление, когда ListBox
прокручивайте вниз и добавляйте новые предметы так, чтобы всегда были k
больше элементов после последнего видимого элемента (где k
Вероятно, это количество элементов, видимых одновременно, так что Page Down работает).
Есть какой-то более чистый способ справиться с этим?
1 ответ
Я бы использовал VirtualizingStackPanel
чтобы пользовательский интерфейс рисовал меньше элементов, а затем использовал технику виртуализации данных, чтобы ограничить объем данных, которые вы храните в памяти. Подробнее смотрите здесь (особенно записи в блоге Bea Stolnitz, на которые есть ссылка).