2010-03-26 2 views
8

Если я использую ListView в виртуальном режиме, то, как я понимаю, просмотр списка отслеживает только небольшое количество элементов в списке. Когда пользователь прокручивает его, он динамически извлекает элементы, которые он должен отображать из виртуального списка.Как добавить/удалить элементы в ListView в виртуальном режиме?

Но что делать, если элемент добавлен или удален из главного списка? Если элемент добавляется/удаляется вне диапазона индексов, отображаемых в представлении списка, я бы предположил, что в представлении списка будут отображаться добавленные/отсутствующие элементы, когда пользователь прокручивается до этого индекса. Это верно? Но что, если элемент добавляется/удаляется из диапазона индексов, которые пользователь просматривает сейчас? Как вызвать просмотр списка для обновления элементов, которые он просматривает в настоящее время, для отображения новых/отсутствующих элементов?

FYI: Я использую ObjectListView, если это имеет значение.

ответ

8

Виртуальный список не знает ничего о вашем списке предметов. Он не отслеживает их, даже небольшой набор. Это только когда-либо спрашивает: «Что вы хотите показать на n-й строке?»

Если ваш основной список изменяется, все, что вам нужно сделать, это перерисовать список. Invalidate() сделают это за вас. Затем listview спросит вас, что он должен показывать в каждой строке, видимой в элементе управления.

Если вы используете ObjectListView, считаете ли вы использование FastObjectListView, которое дает вам преимущества в скорости виртуального списка и простоту использования обычного ObjectListView?

+0

Я загружаю отдельные миниатюры для каждого элемента в списке, поэтому мне нужно получить уведомление, когда пользователь просматривает каждый элемент, чтобы предварительно загрузить миниатюры. Я пытаюсь не загружать все миниатюры сразу, так как потенциально могу показать большое количество элементов. В настоящее время я вызываю Build() для обновления VirtualLIstView при изменении моей коллекции. Есть ли причина, по которой я хотел бы назвать Invalidate() над Build()? –

+1

Виртуальный список - это точно правильный подход, чтобы делать то, что вы хотите - я использовал точно такую ​​же стратегию. И BuildList() лучше всего - он вызывает Invalidate() как часть его обработки. Это работает? – Grammarian