2012-11-23 54 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,这解决了我的问题。