2010-03-26 28 views
8

Si estoy usando un ListView en modo virtual, entonces, según tengo entendido, la vista de lista solo hace un seguimiento de un pequeño número de elementos en la lista. A medida que el usuario se desplaza, recupera de manera dinámica los elementos que necesita mostrar de la lista virtual.¿Cómo agrego/quito elementos a un ListView en modo virtual?

Pero, ¿qué sucede si se agrega o elimina un elemento de la lista maestra? Si se agrega/quita un elemento fuera del rango de índices mostrado por la vista de lista, supongo que la vista de lista mostrará los elementos añadidos/faltantes cuando el usuario se desplaza a ese índice. ¿Es esto correcto? Pero, ¿qué sucede si un elemento se agrega o elimina del rango de índices que el usuario está viendo actualmente? ¿Cómo disparo la vista de lista para actualizar los elementos que está viendo actualmente para mostrar los elementos nuevos/faltantes?

FYI: Estoy usando un ObjectListView si eso hace la diferencia.

Respuesta

8

Una lista virtual no sabe nada acerca de su lista de elementos. No hace un seguimiento de ellos, ni siquiera un pequeño conjunto. Solo pregunta "¿qué quieres mostrar en la novena fila?"

Si su lista maestra cambia, todo lo que tiene que hacer es volver a dibujar la lista. Invalidate() lo hará por usted. La vista de lista le preguntará nuevamente qué debe mostrar en cada fila visible en el control.

Si está utilizando ObjectListView, ¿ha considerado usar FastObjectListView, que le brinda los beneficios de velocidad de una lista virtual y la facilidad de uso de un ObjectListView normal?

+0

Estoy cargando miniaturas individuales para cada elemento de la lista, por lo que debo recibir una notificación cuando el usuario vea cada elemento para poder cargar las miniaturas. Intento evitar cargar todas las miniaturas a la vez, ya que podría mostrar una gran cantidad de elementos. Actualmente llamo a Build() para actualizar VirtualLIstView cuando cambia mi colección. ¿Hay alguna razón por la que me gustaría llamar a Invalidate() sobre Build()? –

+1

Una lista virtual es exactamente el enfoque correcto para hacer lo que desea; he utilizado exactamente la misma estrategia. Y BuildList() es lo mejor: llama a Invalidate() como parte de su procesamiento. ¿Funciona? – Grammarian

Cuestiones relacionadas