2010-11-17 74 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">