silverlight 4 treeview 在很多项目时扩展缓慢

标签 silverlight performance

在 XAML 中我有:

<sdk:TreeView x:Name="navigationTreeView" Grid.Column="0" Grid.Row="1" SelectedItemChanged="TreeView_SelectedItemChanged">
    <sdk:TreeView.ItemContainerStyle>
        <Style TargetType="sdk:TreeViewItem">
            <Setter Property="IsExpanded" Value="True"/>
        </Style>
    </sdk:TreeView.ItemContainerStyle>

    <sdk:TreeView.ItemTemplate>
        <sdk:HierarchicalDataTemplate ItemsSource="{Binding Path=Nodes}">
            <StackPanel Orientation="Horizontal">
                <!--<Image Source="{Binding Path=ImageUri}" />-->
                <TextBlock Text="{Binding Path=Title}" ToolTipService.ToolTip="{Binding Path=Title}"/>                        
            </StackPanel>
        </sdk:HierarchicalDataTemplate>
    </sdk:TreeView.ItemTemplate>
</sdk:TreeView>

在后面的代码中:

this.navigationTreeView.ItemsSource = nodes;
navigationTreeView.ExpandAll(); 

有 1000 个项目作为一个节点的子节点。如果我不扩展元素,一切都很好。但是当我扩展那个节点时它非常慢(可能是 10 秒)。我可以做些什么来加快它的速度?

Silverlight 4,2010 年 4 月工具包。

最佳答案

与 WPF 不同,Silverlight(直到 Silverlight 4,不确定 5)不支持分层数据的 UI 虚拟化,这就是为什么当您展开节点时,HierarchicalDataTemplate 中的 1000 个项目> 未虚拟化,加载时间超过 10 秒。

我相信 Telerik 的 RadTreeView 有其内置的 UI 虚拟化,但控件不是免费的。

到目前为止,我找到的最佳解决方案来自 this site .请注意,它仍然是一个 ListBox 解决方案,但是,因为它不使用 HierarchicalDataTemplate,所以它是完全虚拟化的,看起来就像一个 TreeView .同样通过查看源代码,实现起来也很容易。

enter image description here

我知道这不是这个问题的完美答案,但至少给了你一些选择。 :)

关于silverlight 4 treeview 在很多项目时扩展缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7903188/

相关文章:

c# - .NET:事件的困难

silverlight - 我可以将资源 XAML 字典合并到单个页面的资源中吗?

c# - 确定代码是否在Silverlight中运行的编程方式?

sql - 多字符串匹配性能

c - 给array seat赋值很慢

.net - Silverlight是否要求安装.NET框架?

silverlight - Prism EventAggregator 和 MVVM Light Messenger 总结

R:提高数据框中每一行的 t 检验速度

php - 自定义 preg_replace 函数的任何更有效的方法?

python - Pandas 检查多行中的重叠日期