C# Wpf TreeView具有列,具有UI虚拟化和数据虚拟化
我正在寻找一个wpf控制(免费或商业)。 树应该支持所有常规的树视图特征(样式、数据模板、控件模板等),并支持使用列进行布局(有点像VisualStudio中的监视窗口) 而且:C# Wpf TreeView具有列,具有UI虚拟化和数据虚拟化,c#,wpf,treeview,wpf-controls,data-virtualization,C#,Wpf,Treeview,Wpf Controls,Data Virtualization,我正在寻找一个wpf控制(免费或商业)。 树应该支持所有常规的树视图特征(样式、数据模板、控件模板等),并支持使用列进行布局(有点像VisualStudio中的监视窗口) 而且: 良好的虚拟化-应支持数千个元素 内置数据虚拟化-数据的加载和处理速度很慢,不能一次按一定顺序完成(有点像分页) 视图模型支持和绑定,我更喜欢使用某种视图模型来研究树,而不是研究树本身 内置支持对数据表示进行搜索和筛选,然后在树的可视元素上反映匹配项 精确、快速滚动并选择移动到特定元素(我更喜欢使用项目的ViewMode
我不想自己构建树,我正在寻找至少支持虚拟化和数据虚拟化的现有实现。我见过的最好的例子是。它使用按需加载和文本搜索 要包括
数据虚拟化
,您应该使用:
<TreeView
VirtualizingStackPanel.IsVirtualizing = "True"
VirtualizingStackPanel.VirtualizationMode = "Recycling" />
更新:
TreeViewItem rootItem = new TreeViewItem() { Header = "Item Level 0" };
for (int i = 0; i < 1000; i++)
{
TreeViewItem itemLevel1 = new TreeViewItem() { Header = "Item Level 1" };
itemLevel1.Items.Add(new TreeViewItem());
rootItem.Items.Add(itemLevel1);
}
你可以使用控制。这是免费试用
或控制。这是30天的免费试用。
看到他们的演示,你甚至可以下载并试用
更新1:
TreeViewItem rootItem = new TreeViewItem() { Header = "Item Level 0" };
for (int i = 0; i < 1000; i++)
{
TreeViewItem itemLevel1 = new TreeViewItem() { Header = "Item Level 1" };
itemLevel1.Items.Add(new TreeViewItem());
rootItem.Items.Add(itemLevel1);
}
如果您对性能有任何疑问,那么我可以谈谈我的经验:
- 我有500个节点,加载这些项目的时间是0.0003982秒
- 我可以上下滚动,没有任何冻结的UI(完美的数据虚拟化)
- 当Josh Smith使用延迟加载时,嵌套节点完全打开
- 所有节点都可以有模板。因此,您可以设置任何您想要的图像或设计
- 此
并不完全违反MVVM规则,因为它使用TreeView
作为viewModels
。这意味着如果在TreeViewItems
中有viewModel
,您将不会遇到奇怪的错误或异常。例如treevieItem
TreeView
,因为支持和编辑它非常简单。它的表现真的很棒
myTreeView的照片
:
据我所知,谁能应用您的需求,最好的控制方法是。看看这本书。优点: RadTreeView API支持UI虚拟化,它只处理加载在可视区域中的信息,从而减少应用程序的内存占用,加快加载时间,从而进一步提高UI性能 Telerik RadTreeView控件在处理大量项目时的性能通过其按需加载功能得到显著优化。此机制允许节点在用户通过单击“+”图标展开父节点时加载其子节点 RadTreeView是一种数据驱动控件,旨在显示大量分层数据,它不提供现成的搜索、筛选和排序功能。因此,
操作应该在它所代表的数据上实现 @EliDagan你说得对。请仔细阅读我的答案。我已经写过:不是像下面的例子那样在代码中一个接一个地生成节点,谢谢,但是我需要在所有树上进行虚拟化,而不仅仅是针对每个元素级别(比如TreeView实现)。我还需要一个数据虚拟化(如果可能的话,一个内置的支持),因为我需要加载每个树的不同块time@EliDagan这些virtualzingstackpanel.isvirtualization=“True”virtualzingstackpanel.VirtualizationMode=“Recycling”行用于整个树的数据虚拟化,因此包含元素的每个级别:)。此外,Josh Smith的TreeView还有文本搜索功能。这就是你想要的一切。@EliDagan可以随意问任何问题。如果您觉得我的回复对您有帮助,那么您可以将我的回复标记为答案,以简化将来对其他人的搜索。请像我之前说的那样读这个。框架中的TreeView不是可选的,因为当它与一大组分层数据(其每个节点都有很多子节点)一起使用时,它的性能非常差。(深广树)我还需要数据虚拟化,使我能够加载数据的不同部分,并跟踪它拥有的数据和丢失的数据。我知道我可以自己构建,但我想要现有的解决方案。感谢您的回答。希望找到一个内置支持数据虚拟化的控件。(我想有某种分页行为)比如:“但是,作为一棵树