WPF当TabControl绑定到ViewModels时速度变慢

6

我有一个直接绑定到IEnumerable<ViewModelBase>(不同的ViewModels)的TabControl,使用DataTemplates渲染。 但是当切换选项卡时,可以看到TabItems完全被重新绘制,速度非常慢。这正常吗?


DataTemplates 有多复杂?您是否在 DataTemplate 中包含所有内容,或者 DataTemplate 只包含一个 UserControl 并用于将其与 ViewModel 匹配? - Joel B Fant
问题解决了!是某些属性的懒加载导致的。 - Cartesius00
那么解决方案是什么? - Scott Solmer
2个回答

2
您的数据上下文是否真正将 IEnumerable<T> 暴露为绑定源?如果是的话,我建议您查看一下如何解析数据绑定引用。 这不会明确地解决重新绘制问题,但是如果您使用支持 INotifyPropertyChanged 接口的集合(例如ObservableCollectionICollectionView数据源)公开视图模型的数据源,则可以获得更好的绑定和渲染性能。

在解决重新绘制问题方面,您应该查看此 Dr. WPF 帖子。 有一个提出的解决方案,可以解决您看到的性能问题,如果进一步,您将编写TabControl的子类,并可能使用VirtualizingStackPanel作为自定义TabControl的项源。

这篇文章涵盖了您可以尝试的 UI 和数据虚拟化选项。


1
我认为是的,DataTemplates 是构建对象的蓝图,因此如果您切换选项卡,您的 TabControl 很可能会丢弃旧的选项卡内容并创建新的选项卡内容。可能与 this question 相关。
(尽管人们之前曾抱怨过 TabControl 的行为实际上可能会重用对象,但我想这可能取决于项目的底层类型)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接