2010-11-17 64 views
0

我我ContentPresenter结合其类型指涉的DataTemplate中包含第三方控件的一个实例(DevExpress的GridControl)一个视图模型。当此控件绑定到适度大小的集合(即1000个项目)时,该控件需要4或5秒才能加载。所以,我的问题 - 因为这需要一段时间才能呈现控件,可以在此以某种方式使用这样一个BackgroundWorker的UI不挂呢?请记住,我的控件驻留在DataTemplate中,因此任何代码隐藏都不是理想的选择。渲染UI使用的BackgroundWorker

谢谢!

回答

2

不幸的是创建实际的UI(在你的情况下,创建,定位,并绘制控件)必须在UI线程上完成,由于兼容性的限制 - 所有UI组件必须由UI线程创建的,他们只能也由UI线程修改。

有一件事我会推荐看到的是虚拟化 - 如果你没有显示的1000个项目中的DataTemplate,为什么创建所有控件的?你可以找到例子周围像Virtualized WPF Canvas,或者使用内置的VirtualizingStackPanel。使用这些技术将更多的工作不是简单的一个视图模型绑定到一个DataTemplate中的项目,但会给好得多的性能。

如果实际问题只是DevExpress GridControl超1000个项目,然后你想看看你是否可以设置虚拟模式,或切换到不同的第三方控制。

0

ItemsControl应包含VirtualizingStackPanel其中ListView和ListBox的事,但要确保虚拟化在接通电源和使用容器recylcling

<ItemsControl 
VirtualizingStackPanel.IsVirtualizing="true" 
VirtualizingStackPanel.VirtualizationMode="Recycling">