2010-10-28 59 views
2

我正在使用WPFToolkit Accordion控件,將手風琴中的項目定義爲TreeView。在WPFToolkit Accordion上啓用UI虛擬化

爲背景,這裏是XAML的相關部分:

<ScrollViewer VerticalScrollBarVisibility="Auto" CanContentScroll="True"> 
    <layoutToolkit:Accordion DockPanel.Dock="Bottom" 
       HorizontalAlignment="Stretch" 
       VerticalAlignment="Stretch" 
       ItemsSource="{Binding FoodTypes}" 
       SelectionMode="ZeroOrOne" 
       VirtualizingStackPanel.IsVirtualizing="True" 
       VirtualizingStackPanel.VirtualizationMode="Recycling"> 
     <layoutToolkit:Accordion.ContentTemplate> 
      <DataTemplate> 
       <TreeView Margin="0 0 0 0" BorderThickness="0" 
          ItemsSource="{Binding ChildrenView}" 
          HorizontalAlignment="Stretch" 
          VerticalAlignment="Stretch" 
          VirtualizingStackPanel.IsVirtualizing="True" 
          VirtualizingStackPanel.VirtualizationMode="Recycling"> 

本來我實現了這個只有一個TreeView(無WPFToolkit手風琴)和第二下裝載40,000項。

當我在根層次上用手風琴實現結構時,點擊擴展器的加載時間超過了7秒。這太長了。

我對應用程序進行了剖析,發現第一級中的500個項目正在遞歸測量,導致加載時間增加。看起來Accordion控件並未使用UI虛擬化。有沒有辦法讓手風琴使用UI虛擬化?如果沒有,我有什麼方法可以提高手風琴的性能,因此它可以更快地加載一級物品?

回答

1

我能夠通過在她的博客文章「是否有任何技巧可以幫助我改進TreeView的性能 - 第三部分」中描述Bea Stollnitz的方式使用列表實現Hierarchical樹來解決此問題? http://bea.stollnitz.com/blog/?p=45。這讓我可以使用虛擬化堆棧面板,因爲這是WPF ListView的代名詞。它在本文中解釋說您不會在WPF樹視圖中虛擬化堆棧面板。因此,如果您目前需要數據虛擬化,最好的解決方案是使用ListBox或ListView實現分層樹。這並不難,我現在表現出色。