2012-11-23 85 views
3

我有一個樹形視圖,我放入了〜4000個對象。我的樹視圖的初始加載和填充來自對象列表,並且需要很長的時間。這是我如何填寫它:具有大量數據的TreeView優化

private List<ItemIdPair> m_itemList; 
public List<ItemIdPair> ItemList { 
    get { return m_itemList; } 
    set { m_itemList = value; } 
} 

public void Window_Loaded(object sender, RoutedEventArgs e) { 
    try { 
     ItemList = ItemListParse(); // data from .txt file (NOT the performance problem) 
     ItemList = ItemList.OrderBy(o => o.ItemName).ToList(); 
     ItemTreeView.DataContext = ItemList; 
    } catch(Exception ex) { } 
    } 

我的樹視圖綁定到我的DataContext在XAML中。

我也有一個文本框來搜索treeview並縮小結果,這也有巨大的性能影響。它看起來像這樣:

public void LoadTree(string search) { 
     try { 
      List<ItemIdPair> items = ItemList.Where(i => i.ItemName.ToLower().Contains(search.ToLower())).ToList(); 
      ItemTreeView.DataContext = items; 
     } catch(Exception ex) { } 
    } 

關於如何優化這個,或重構它給我一個性能提升的任何提示? Treeview不應該表現得這麼慢。

回答

3

嘗試將虛擬化添加到您的TreeView。

<TreeView Name="MyTreeView" VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Recycling" /> 
+0

這就是它!謝謝你,先生! –

+1

沒問題! :) –

0

嘗試使用VirtualizingStackPanelTreeView,我有同樣的情形問題ComboBox,這解決了我的問題。