我将ContentPresenter绑定到ViewModel,该ViewModel具有类型引用DataTemplate,其中包含第三方控件的实例(DevExpress'GridControl)。当此控件绑定到适度大小的集合(即1000个项目)时,控件需要花费四到五秒才能加载。那么,对于我的问题 - 对于需要一段时间来渲染的控件,可以使用BackgroundWorker以某种方式完成这样的UI,以便UI不会挂起吗?请记住,我的控件驻留在DataTemplate中,因此任何代码隐藏都不是理想的选项。
谢谢!
答案 0 :(得分:2)
不幸的是,由于兼容性限制,必须在UI线程上创建实际的UI(在您的情况下,创建,定位和呈现控件) - 所有UI组件必须由UI线程创建,并且它们只能被更改也可以通过UI线程。
我建议看一下虚拟化 - 如果您没有显示1000个项目的数据模板,为什么要创建所有控件?您可以找到类似Virtualized WPF Canvas或使用内置VirtualizingStackPanel
的示例。使用这些技术比简单地将视图模型绑定到具有datatemplate的项更多,但会提供更好,更好的性能。
如果实际问题只是DevExpress GridControl超级慢1000项,那么你会想看看你是否可以将 it 设置为虚拟模式,或者切换到另一个党的控制。
答案 1 :(得分:0)
您的ItemsControl
应该包含ListView和ListBox所做的VirtualizingStackPanel
,但请确保已启用虚拟化并使用容器重新打包
<ItemsControl
VirtualizingStackPanel.IsVirtualizing="true"
VirtualizingStackPanel.VirtualizationMode="Recycling">