2011-07-07 326 views
1

我有一個mvvm wpf應用程序,可以一次加載由多個控件組成的窗口。我想要這個窗口分別加載控件並異步。Wpf MVVM異步加載UI控件

有什麼建議嗎?

回答

0

不幸的是,如果您的控件是在XAML中定義的,那麼它們將會使用InitializeComponent調用進行初始化並完成加載過程。加載XAML窗口中的所有事件都會發生,無論您是否訂閱它們。

您可以將控件動態添加到代碼後面的表單中,但是如果您有單獨的線程完成工作,則需要使用Application Dispatcher CheckAccess和Invoke方法來確保控件加載到擁有該線程的線程上他們。

2

對於這個問題,我使用了Singleton模式。如果你熟悉PRISM和Bootstrapper,它有點類似。

這裏的主要想法是覆蓋App.xaml中的方法OnStartup。默認行爲顯示在您的xaml StartupUri="MainWindow.xaml"中,您必須刪除該屬性。

OnStartup覆蓋方法中,我使用一個類創建所有我的對象(Views,ViewModels,鏈接DataContexts ...)並在初始化完成時觸發一個事件。

此時我忽略閃屏並顯示一個滿載的應用程序(當您創建MainWindow時調用InitializeComponent,因此此時它已被調用)。

爲了更多的擴展使用,您可以在Windows和EventHandler中的事件添加到您的引導程序類中。例如,當我想要完全刷新我的應用程序(重新啓動它)以及數據庫請求(在我的情況下,僅在應用程序啓動時才執行以加載參考)時,我會使用它。

希望能幫到:)