2010-03-26 29 views
8

Nếu tôi đang sử dụng ListView ở chế độ ảo thì khi tôi hiểu nó, chế độ xem danh sách chỉ theo dõi một số lượng nhỏ các mục trong danh sách. Khi người dùng cuộn nó tự động truy xuất các mục cần hiển thị từ danh sách ảo.Làm cách nào để thêm/xóa các mục vào một ListView ở chế độ ảo?

Nhưng điều gì sẽ xảy ra nếu một mục được thêm vào hoặc bị xóa khỏi danh sách chính? Nếu một mục được thêm vào/loại bỏ bên ngoài phạm vi của các chỉ mục được hiển thị theo dạng xem danh sách thì tôi sẽ giả sử xem danh sách sẽ hiển thị các mục được thêm/bị thiếu khi người dùng cuộn đến chỉ mục đó. Điều này có đúng không? Nhưng điều gì xảy ra nếu một mục được thêm/xóa khỏi phạm vi chỉ mục mà người dùng hiện đang xem? Làm cách nào để kích hoạt chế độ xem danh sách để làm mới các mục hiện đang xem để hiển thị các mục mới/bị thiếu?

FYI: Tôi đang sử dụng ObjectListView nếu điều đó tạo ra bất kỳ sự khác biệt nào.

Trả lời

8

Danh sách ảo không biết gì về danh sách các mục của bạn. Nó không theo dõi chúng, thậm chí không phải là một bộ nhỏ. Nó chỉ bao giờ hỏi "những gì bạn muốn hiển thị ở hàng thứ n?"

Nếu danh sách chính của bạn thay đổi, tất cả những gì bạn cần làm là vẽ lại danh sách. Invalidate() sẽ làm điều đó cho bạn. Chế độ xem danh sách sau đó sẽ hỏi bạn một lần nữa thông tin sẽ hiển thị ở mỗi hàng hiển thị trong điều khiển.

Nếu bạn đang sử dụng ObjectListView, bạn có cân nhắc sử dụng FastObjectListView mang lại cho bạn lợi ích tốc độ của danh sách ảo và dễ sử dụng của ObjectListView bình thường không?

+0

Tôi đang tải hình thu nhỏ riêng lẻ cho từng mục trong danh sách để tôi cần được thông báo khi người dùng đang xem từng mục để tôi có thể tải trước hình thu nhỏ. Tôi đang cố gắng tránh tải tất cả các hình thu nhỏ cùng một lúc vì tôi có khả năng hiển thị một số lượng lớn các mục. Hiện tại tôi đang gọi Build() để cập nhật VirtualLIstView khi bộ sưu tập của tôi thay đổi. Có một lý do tôi muốn gọi Invalidate() trên Build()? –

+1

Danh sách ảo chính xác là cách tiếp cận đúng để thực hiện những gì bạn muốn - tôi đã sử dụng chính xác cùng một chiến lược. Và BuildList() là tốt nhất - nó gọi Invalidate() như là một phần của quá trình xử lý của nó. Nó có hoạt động không? – Grammarian

Các vấn đề liên quan