2011-01-05 32 views
13

chúng tôi đang cố gắng tìm ra cách tốt để ảo hóa TreeView, dữ liệu không thực sự là vấn đề vì nó rất nhẹ (khoảng 16 byte cho mỗi mục), vấn đề là chúng tôi có thể có hàng chục hàng ngàn, và mặc dù dữ liệu thực tế sẽ chỉ mất 160 kb bộ nhớ, các mục treeview sử dụng nhiều bộ nhớ hơn. Chúng tôi đã thử ảo hóa với 3 cây khác nhau hiện nay, WPF, Infragistics và Telerik. Tất cả đều có những vấn đề lớn mà làm cho họ không thể sử dụng cho các ứng dụng của chúng tôi:Ảo hóa TreeView

WPF TreeView: Các thanh cuộn cho thấy một số hành vi kỳ lạ, nhảy xung quanh rất nhiều, thay đổi kích thước không nhất quán, di chuyển bằng cách kéo nó với chuột không hoạt động đúng (nhảy qua lại)

Telerik: Items biến mất, thanh cuộn là thất thường quá, các mục mở rộng một cách ngẫu nhiên sụp đổ, phong cách không làm việc

Infragistics: Items không ảo hóa ở tất cả, mọi mục vẫn còn trong bộ nhớ làm ảo hóa vô dụng.

Chúng tôi đã đấu tranh với điều này một vài tháng nay và chúng tôi đã không thể tìm được giải pháp tốt. Có ai trong số các bạn triển khai thành công ảo hóa trong một TreeView với hơn 9000 mặt hàng không? Nếu vậy, chiến lược của bạn là gì? Bạn có sử dụng các điều khiển của bên thứ ba không? Nó có hoạt động 100% không?

Bất kỳ đề xuất nào được đánh giá cao.

Cảm ơn.

+1

1 Tôi có cùng một vấn đề với WPF Ảo Treeview, cố gắng tất cả mọi thứ và hành vi vẫn thất thường khi di chuyển có liên quan. – BrokenGlass

+0

@BrokenGlass Cảm ơn bạn đã hỗ trợ câu hỏi. Tôi hy vọng chúng tôi có được một giải pháp tốt cho việc này. – Carlo

+0

cũng thấy câu hỏi liên quan của tôi ở đây (rõ ràng là w/o câu trả lời): http://stackoverflow.com/questions/4074475/scrolling-bug-in-wpf-virtualized-treeview – BrokenGlass

Trả lời

5

Chúng tôi đã sử dụng Bea Costa trick của thụt mục trong Stollnitz của a ListView và sử dụng Giao diện người dùng ảo để có hiệu quả tốt.

http://www.beacosta.com/blog/?p=45

tôi đã nhận được 100.000 mục trong sự ủng hộ ICollectionView, và nó vẫn còn khá nhạy để lọc vv

+0

Thật đáng buồn là điều này không hoạt động với hộp Treeview ảo hóa, thay vì phải sử dụng các loại thủ thuật này – BrokenGlass

+0

Nhưng cô ấy đề cập rằng giải pháp này là vì TreeView không có ảo hóa trước 3.5, nên tôi tự hỏi liệu nó có thực sự giải quyết vấn đề. Tôi sẽ cho nó một shot ngay lập tức, cảm ơn cho đề nghị này. – Carlo

+0

Tôi đã sử dụng ảo hóa giao diện người dùng với TreeView chạy v4.0 và vẫn chưa hoạt động tốt. Nó chỉ ra rằng lý do là dễ dàng để phá vỡ ảo hóa bằng cách sử dụng TreeView. ListView cho phép bạn vượt qua những hạn chế này. – codekaizen

2

Chúng tôi cũng đang ở trong một tình huống tương tự, chúng tôi đã thử sử dụng chế độ xem cây Syncfusion và nó đã gây thảm hại. Vì chúng tôi đã không có sự lựa chọn của bất kỳ kiểm soát bên thứ 3 khác và không có giải pháp tốt hơn đã có sẵn, Chúng tôi cuối cùng đã giải quyết với ảo hóa và tải theo yêu cầu (Lazy tải) với nhau.

Như trong trường hợp của chúng tôi, nhìn chung tất cả các nút sẽ không được mở rộng tại bất kỳ thời điểm đã định nào. Điều này giải quyết các vấn đề cuộn ở một mức độ nào đó và làm cho ứng dụng có thể sử dụng được trong hầu hết các kịch bản. Mặc dù chúng tôi vẫn có con số của chúng tôi vượt qua và tiếp tục tìm kiếm một giải pháp tốt hơn.

tôi muốn đề cập đến ở đây là sử dụng cả ảo hóa và tải về nhu cầu (Lazy tải) cùng có tác dụng phụ riêng của mình -

Need a sample for WPF TreeView search with Virtualization and Load On Demand

.

Một số mẫu để thực hiện tải về theo yêu cầu -

http://www.codeproject.com/KB/WPF/WPF_Explorer_Tree.aspx

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/1eb3ed3d-6379-4353-9f35-2c0aecb885f2/

http://www.telerik.com/help/wpf/radtreeview-features-load-on-demand.html

+0

Tôi đã cố gắng kết hợp ảo hóa và tải theo yêu cầu, nhưng không may, ảo hóa không hoạt động khi bạn tạo các mục khi đang di chuyển, chỉ khi liên kết (trên WPF và TreeViews của WPF và Telerik ít nhất), vì vậy chúng tôi cũng phải tránh xa tùy chọn đó. Chúng tôi có khả năng có thể có hàng ngàn mặt hàng được mở rộng, có nghĩa là hàng ngàn TreeViewItems trong bộ nhớ. Cám ơn vì sự gợi ý. – Carlo