2010-03-26 23 views
8

Sanal modda bir ListView kullanıyorum, anladığım kadarıyla, liste görünümü sadece listedeki az sayıda öğenin kaydını tutar. Kullanıcı kaydırdıkça, sanal listeden göstermesi gereken öğeleri dinamik olarak alır.Sanal modda bir ListView öğesine nasıl öğe ekleyebilirim/kaldırabilirim?

Ancak bir öğe ana listeden eklenir veya kaldırılırsa ne olur? Liste görünümünde gösterilen indeks aralığı dışında bir öğe eklenirse/çıkarılırsa, kullanıcı görünümü bu dizine kaydırıldığında liste görünümünün eklenmiş/eksik öğeleri göstereceğini varsayardım. Bu doğru mu? Ancak, kullanıcı şu anda görüntülediği dizin aralıklarından eklendiğinde/çıkarıldığında ne olur? Yeni/eksik öğeleri göstermek için görüntülemekte olan öğeleri yenilemek için liste görünümünü nasıl tetiklerim?

FYI: Bu, bir fark yaratırsa ObjectListView kullanıyorum.

cevap

8

Sanal liste, öğeler listeniz hakkında hiçbir şey bilmiyor. Onları izlemez, küçük bir set bile değil. Sadece "n 'satırında ne göstermek istersin?" Diye soruyor.

Ana listeniz değişirse, yapmanız gereken tek şey listeyi yeniden çizmektir. Invalidate() bunu sizin için yapacak. Liste görünümü daha sonra kontrolde görünen her satırda neyin gösterilmesi gerektiğini tekrar soracaktır.

ObjectListView kullanıyorsanız, size sanal bir listenin hız avantajlarını ve normal bir ObjectListView kullanım kolaylığını veren FastObjectListView kullanmayı düşündünüz mü?

+0

Listedeki her öğe için ayrı ayrı küçük resimler yüklüyorum, böylece her bir öğeyi görüntülerken bildirimde bulunmam gerekiyor, böylece küçük resimleri önceden yükleyebilirim. Büyük olasılıkla çok sayıda öğe gösterebileceğinden tüm küçük resimleri bir kerede yüklemekten kaçınmaya çalışıyorum. Şu anda koleksiyonum değiştiğinde VirtualLIstView güncellemek için Build() çağırıyorum. Invalidate() öğesini Build() üzerinden çağırmak için bir neden var mı? –

+1

Sanal bir liste tam olarak ne istediğinizi yapmak için doğru bir yaklaşımdır - tam olarak aynı stratejiyi kullandım. Ve BuildList() en iyisidir - işlemenin bir parçası olarak Invalidate() öğesini çağırır. Çalışıyor mu? – Grammarian

İlgili konular