2012-12-05 136 views
4

我的ViewModel根據用戶點擊選擇一個視圖。其中一個視圖包含許多視覺元素 - 包含具有數據模型的視圖模型的數據模型的視圖模型,每個視圖模型在畫布上呈現具有背景圖像刷的視圖模型。全視圖以大約100個這樣的畫筆畫筆結束,每個畫筆畫有十幾個疊加的橢圓,整個視圖位於可滾動的視圖框中。如何預先渲染視圖?

第一次創建此視圖時,用戶單擊然後在渲染完成後掛起一段時間。我想早點完成這個渲染 - 例如在啓動過程中。我已經創建了視圖對象,但仍然在用戶單擊時我們在渲染完成時掛起。

有什麼辦法讓WPF/xaml預渲染它,所以點擊響應更好?

回答

3

正如我看到你使用MVVM模式。我會嘗試遵循以下幾點:

在啓動過程中創建視圖並將DataContext設置爲您的viewmodel實例。然後模擬WPF執行的工作。在視圖上調用Measure()Arrange()方法強制WPF更新數據綁定並生成可視化樹。

但是隻有一個UI線程。所以在這一點上再次阻止你的啓動程序。你可以通過將小作品分成幾部分來避免這種情況。也許你在視圖模型中有一些項目的集合。然後,您可以使用DipatcherTimer,並在每一步中向該集合中添加一些合理數量的項目,並在每次迭代後調用Measure和Arrange以更新視圖的可視化樹。 視圖完全初始化後,渲染不應再遮擋。

+0

啊是的,我看到了 - 感謝您的指導。爲了清楚起見,在InitalizeComponent()後面我調用了this.Measure(new System.Windows.Size(double.PositiveInfinity,double.PositiveInfinity));''和'this.Arrange(new System.Windows.Rect(new System.Windows.Size(layoutRoot.ActualWidth,layoutRoot.ActualHeight)));'在我的視圖的代碼隱藏。 – AndyC