2010-03-26 15 views
8

Se sto usando un ListView in modalità virtuale, quindi, a quanto ho capito, la visualizzazione elenco tiene traccia solo di un piccolo numero di elementi nell'elenco. Mentre l'utente scorre, recupera in modo dinamico gli elementi che deve mostrare dalla lista virtuale.Come aggiungere/rimuovere elementi a un ListView in modalità virtuale?

Ma cosa succede se un articolo viene aggiunto o rimosso dall'elenco principale? Se un articolo viene aggiunto/rimosso al di fuori dell'intervallo di indici mostrato dalla visualizzazione elenco, suppongo che la visualizzazione elenco mostri gli elementi aggiunti/mancanti quando l'utente scorre a tale indice. È corretto? Ma cosa succede se un articolo viene aggiunto/rimosso dall'intervallo di indici che l'utente sta attualmente visualizzando? Come faccio ad attivare la visualizzazione elenco per aggiornare gli elementi attualmente visualizzati per mostrare gli elementi nuovi/mancanti?

FYI: Sto utilizzando un ObjectListView se questo fa alcuna differenza.

risposta

8

Una lista virtuale non sa nulla del tuo elenco di articoli. Non tiene traccia di loro, nemmeno un piccolo set. Si chiede sempre e solo "cosa vuoi mostrare alla nona fila?"

Se l'elenco principale cambia, tutto ciò che è necessario fare è ridisegnare l'elenco. Invalidate() lo farà per te. Il listview ti chiederà di nuovo cosa dovrebbe mostrare ad ogni riga visibile nel controllo.

Se si utilizza ObjectListView, si è considerato l'utilizzo di FastObjectListView che offre i vantaggi di velocità di un elenco virtuale e la facilità di utilizzo di un ObjectListView normale?

+0

Sto caricando le singole anteprime per ciascun elemento nell'elenco, quindi è necessario ricevere una notifica quando l'utente sta visualizzando ciascun elemento in modo da poter precaricare le miniature. Sto cercando di evitare di caricare tutte le miniature in una volta poiché potrei potenzialmente mostrare un numero elevato di elementi. Attualmente sto chiamando Build() per aggiornare VirtualLIstView quando la mia collezione cambia. C'è una ragione per cui vorrei chiamare Invalidate() su Build()? –

+1

Una lista virtuale è esattamente l'approccio giusto per fare ciò che vuoi: ho usato esattamente la stessa strategia. E BuildList() è il migliore - chiama Invalidate() come parte del suo processo. Funziona? – Grammarian