2013-08-06 101 views
1

我使用MVVM模式的WPF應用程序。啓動窗口由3個控件MenuTitleBarDataGrid組成。目前,大約需要5秒鐘才能完成所有操作(從服務中提取數據,動態生成DataGrid及其渲染),然後突然顯示給用戶界面。問題是,最終用戶在啓動程序後必須等待5秒才能看到窗口。大多數操作與DataGrid有關。因此,我將DataGrid相關代碼移至Window Loaded事件,現在該窗口突然打開,但顯示黑屏,並在一段時間後顯示DataGrid中的數據。WPF窗口冷啓動 - 顯示黑屏

所以我的目標是MenuTitleBar並完成初始加載後顯示的窗口中,執行加載DataGrid在後臺線程,這樣我可以顯示視圖加載面板的任務。如何在完成初始加載之後調用與DataGrid相關的特定方法?

另外,我無法使用閃屏(這是在要求)。

請建議?

+0

使用ContentRendered而不是加載 – metacircle

+0

使用MVVM移動數據訪問操作到後臺工作,並提供某種類型的加載圖像GIF或標籤的要告訴你的最終用戶的工作正在做。 – Bearcat9425

回答

5

你應該在後臺Thread執行任何長時間運行的進程......這將釋放你的UI。如果您對多線程應用程序不熟悉,請參閱MSDN上的BackgroundWorker Class頁面,因爲它具有代碼示例。

另一件需要注意的事情是,您應該將IsAsync="True"屬性添加到DataGrid.ItemsSourceBinding聲明中,讓它知道它必須等待數據。這樣,您的DataGrid將顯示爲空,然後當數據準備就緒時,它將填充。

+1

除此之外,閃屏可能是一個不錯的選擇,因此用戶不會在空的UI控件盯着,直到數據負載。即使世界很多文章對SO,[這裏有一個(http://stackoverflow.com/questions/1219273/wpf-splash-screen-w-dynamic-elements-how) – Shoe

+0

感謝IsAsync。它是否作爲一個單獨的線程工作? – Dennis

+0

不,它只是告訴'Binding'對象它應該獲取並異步設置值。有關詳細信息,請參閱MSDN上的[Binding.IsAsync Property](http://msdn.microsoft.com/zh-cn/library/system.windows.data.binding.isasync.aspx)頁面。 – Sheridan