我TabControl
直接绑定到IEnumerable<ViewModelBase>
(不同的ViewModel),使用DataTemplates
呈现。切换标签时但是,可以看到TabItems
被完全重绘,而且速度太慢了。这是正常的吗?
答案 0 :(得分:2)
您的数据上下文是否真正公开IEnumerable<T>
作为绑定源?如果是这样,我建议你看看How Data Binding References are Resolved。这不会明确解决重绘问题,但如果您使用支持INotifyPropertyChanged界面的集合(例如ObservableCollection或ICollectionView数据源公开您的视图模型数据源,那么您将获得更好的绑定和渲染性能。
在本期重绘方面,您应该看一下this Dr. WPF post。有一个针对您所看到的性能问题的建议解决方案,为了更进一步,您将编写一个TabControl子类,并可能使用VirtualizingStackPanel作为自定义TabControl的项目源。
此article介绍了您可能尝试的用户界面和数据虚拟化选项。
答案 1 :(得分:1)
我会说是的,DataTemplates是如何构造对象的蓝图,因此TabControl可能会抛出旧的选项卡内容,并在切换选项卡时创建一个新的选项卡内容。可能this question是相关的。
(尽管人们之前抱怨过TabControl实际上可能会重用对象的行为,但我认为这可能取决于项目的基础类型)