2011-01-05 15 views
13

próbujemy wymyślić dobry sposób na wirtualizację TreeView, dane nie są tak naprawdę problemem, ponieważ są bardzo lekkie (około 16 bajtów na element), problem polega na tym, że potencjalnie możemy mieć dziesiątki Tysiące i chociaż rzeczywiste dane zajmowałyby tylko 160 KB pamięci, elementy widoku drzewa używają o wiele więcej pamięci. Próbowaliśmy wirtualizacji z 3 różnymi drzewami teraz, WPF, Infragistics i Telerik. Wszystkie z nich mają duże problemy, które sprawia, że ​​są bezużyteczne dla naszej aplikacji:TreeView Virtualization

WPF TreeView: Pasek przewijania pokazuje jakieś dziwne zachowanie, skacze wokół partii, zmienia rozmiar niekonsekwentnie, przewijanie poprzez przeciągnięcie go myszką nie działa prawidłowo (przeskakuje tam iz powrotem)

Telerik: przedmioty znikają, pasek przewijania jest niekonsekwentny też przedmioty losowo poszerzyć upadek, style nie działa

Infragistics: Rzeczy nie są w ogóle wirtualizacji, każdy element pozostaje w wirtualizacja pamięci jest bezużyteczna.

Od tego czasu zmagamy się z tym problemem i nie byliśmy w stanie znaleźć dobrego rozwiązania. Czy któryś z Was pomyślnie wdrożył wirtualizację w wersji TreeView z ponad 9000 elementów? Jeśli tak, jaka była twoja strategia? Czy korzystasz z kontroli zewnętrznych? Czy to działa w 100%?

Wszelkie sugestie bardzo mile widziane.

Dzięki.

+1

+1 Mam ten sam problem z WPF zwirtualizowanych widoku drzewa, próbowałem wszystkiego i zachowanie jest nadal błędne, gdy chodzi o przewijanie. – BrokenGlass

+0

@BrokenGlass Dzięki za udzielenie odpowiedzi na pytanie. Mam nadzieję, że otrzymamy dobre rozwiązanie. – Carlo

+0

Zobacz także moje pokrewne pytanie tutaj (oczywiście w/o odpowiedź): http://stackoverflow.com/questions/4074475/scrolling-bug-in-wpf-virtualized-treeview – BrokenGlass

Odpowiedz

5

Użyliśmy Bea sztuczka wcięć przedmioty w Costy Stollnitz za a ListView i wykorzystanie wirtualizacji UI do dobrego efektu.

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

stałam 100,000 pozycji w podłożu ICollectionView, i nadal jest dość wrażliwy na filtrowanie itp

+0

To smutne, że to nie działa po wyjęciu z pudełka z wirtualnymi widokami drzewa, zamiast tego używać tego rodzaju sztuczek – BrokenGlass

+0

Ale ona wspomina, że ​​to rozwiązanie było spowodowane tym, że TreeView nie miał wirtualizacji przed 3.5, więc zastanawiam się, czy to naprawdę rozwiązuje problem. Dam ci szansę, dzięki za sugestię. – Carlo

+0

Używałem wirtualizacji UI z TreeView działającym w wersji 4.0, i nadal nie działało zbyt dobrze. Okazało się, że powodem było łatwe złamanie wirtualizacji za pomocą TreeView. ListView pozwala ominąć te ograniczenia. – codekaizen

2

Jesteśmy również w podobnej sytuacji, próbowaliśmy użyć widoku drzewa Syncfusion i to było żałosne. Ponieważ nie mieliśmy wyboru żadnej innej trzeciej kontroli partii i nie było lepszego rozwiązania, ostatecznie uzgodniliśmy razem z wirtualizacją i ładowaniem na żądanie (Lazy loading).

Tak jak w naszym przypadku, ogólnie wszystkie węzły nie zostaną w danym momencie rozszerzone. Rozwiązuje to w pewnym stopniu kwestie przewijania i sprawia, że ​​aplikacja jest użyteczna w większości scenariuszy. Chociaż nadal mamy nasze dane i wciąż szukamy lepszego rozwiązania.

Chciałbym tutaj wspomnieć, że użyciu zarówno wirtualizacji i załadować na popytu (Lazy załadunku) razem mają swoje własne skutki uboczne -

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

.

Niektóre próbki wykonawcze obciążenie popytu -

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

Próbowałem połączyć wirtualizację i obciążenie na żądanie, ale niestety wirtualizacja nie działa podczas tworzenia elementów w locie, tylko przy wiązaniu (przynajmniej w przypadku TreeViews WPF i Telerik), więc musieliśmy od tej opcji również odejść. Możemy potencjalnie rozszerzyć tysiące elementów, co oznacza tysiące TreeViewItems w pamięci. Dzieki za sugestie. – Carlo