我正在尝试提高我的树视图在 WPF 中的性能,当您打开一个包含 6000 个子节点的节点时,当前显示它大约需要 13 秒。我为子集合使用 observablecollection,数据模板绑定到 TransactionViewModel 类型,该类型有大约 7 列,每列从视图模型中提取一条数据。
创建并实例化了 6000 个子节点的事务视图模型,但由于您还没有直观地显示它们中的任何一个,所以第一次展开节点时,需要 13 秒才能显示。如果您随后收缩并展开节点,它会立即显示,显示/加载时间为零。我能看到的唯一区别是 TransactionviewModel 的每个绑定依赖项属性第一次都有它由 XAML 绑定调用的 getter,而当您第二次重新展开时,这一切都没有发生,因为没有任何改变,所以 WPF 没有再次调用 getter,大概只是将绑定信息保存在内存中,以备第二次扩展时使用。
所以控件的可视化绘制是即时的,但是当你第一次打开它时(即使 6000 个 transactionviewmodel 对象已经完全加载到子集合中),纯粹是行的渲染是需要时间的。
有趣的是,如果我将数据模板更改为不绑定到视图模型对象上的任何依赖项属性并仅输出一个空白网格,则加载仍需要 8 秒。因此,即使没有任何数据绑定调用,树查看器也需要 8 秒来呈现 6000 行。多出 5 秒,然后每行提供大约 5 个绑定数据列,因此与基本渲染相比,这是一个很小的成本。
8s 渲染 6000 个空白行对我来说似乎很高。在将 XAML 从数据模板呈现为树视图时,是否有任何主要原因可能会发生这种情况或需要注意的事项?我试过只使用一个空的数据模板 - 即其中甚至没有一个空白网格,它仍然需要 7 秒。
鉴于它会立即折叠和展开,为什么第一次它甚至没有呈现任何 XAML 或调用任何数据绑定需要这么长时间?
异步调用也不是解决方案,因为我的问题不是 GUI 响应,而是加载数据所花费的时间。用户需要比现在更快地获得数据。
非常感谢