2010-03-26 7 views
8

Wenn ich eine ListView im virtuellen Modus verwende, dann verfolgt die Listenansicht nach meinem Verständnis nur eine kleine Anzahl von Elementen in der Liste. Während der Benutzer scrollt, ruft er dynamisch Elemente ab, die aus der virtuellen Liste angezeigt werden sollen.Wie kann ich Elemente zu einem ListView im virtuellen Modus hinzufügen/entfernen?

Aber was ist, wenn ein Element hinzugefügt oder aus der Hauptliste entfernt wird? Wenn ein Element außerhalb des Bereichs von Indizes hinzugefügt oder entfernt wird, der von der Listenansicht angezeigt wird, würde ich annehmen, dass die Listenansicht die hinzugefügten/fehlenden Elemente anzeigen würde, wenn der Benutzer zu diesem Index scrollt. Ist das richtig? Was aber, wenn ein Element zum Indexbereich hinzugefügt/entfernt wird, den der Benutzer gerade anzeigt? Wie trigge ich die Listenansicht an, um die Elemente, die gerade angezeigt werden, zu aktualisieren, um die neuen/fehlenden Elemente anzuzeigen?

FYI: Ich verwende eine ObjectListView, wenn das einen Unterschied macht.

Antwort

8

Eine virtuelle Liste weiß nichts über Ihre Liste von Elementen. Es verfolgt sie nicht, nicht einmal ein kleines Set. Es fragt immer nur "was willst du in der n-ten Reihe zeigen?"

Wenn sich Ihre Masterliste ändert, müssen Sie lediglich die Liste neu zeichnen. Invalidate() wird das für Sie tun. In der Listenansicht werden Sie dann erneut gefragt, was in jeder im Steuerelement sichtbaren Zeile angezeigt werden soll.

Wenn Sie ObjectListView verwenden, haben Sie die Verwendung der FastObjectListView in Betracht gezogen, die Ihnen die Geschwindigkeitsvorteile einer virtuellen Liste und die Benutzerfreundlichkeit einer normalen ObjectListView bietet?

+0

Ich lade einzelne Thumbnails für jedes Element in der Liste, so dass ich benachrichtigt werden muss, wenn der Benutzer jedes Element anzeigt, damit ich die Thumbnails laden kann. Ich versuche zu vermeiden, alle Thumbnails auf einmal zu laden, da ich möglicherweise eine große Anzahl von Gegenständen zeigen könnte. Momentan rufe ich Build() auf, um die VirtualLIstView zu aktualisieren, wenn sich meine Sammlung ändert. Gibt es einen Grund, dass ich Invalidate() über Build() aufrufen möchte? –

+1

Eine virtuelle Liste ist genau der richtige Ansatz, um zu tun, was Sie wollen - ich habe genau die gleiche Strategie verwendet. Und BuildList() ist am besten - es ruft Invalidate() als Teil seiner Verarbeitung auf. Funktioniert es? – Grammarian

Verwandte Themen