2011-02-04 118 views
1

我正在編寫遵循MVVM原則的WPF應用程序。WPF/MVVM - 如何在啓動時執行命令?

我不想在啓動時執行命令 - 我懷疑什麼是最好的方法?

ViewModel對於是否有任何視圖應該是漠不關心的,對吧?

是否可以在虛擬機構造函數中做最後一件事呢?或者是否有'我現在可以掛接的應用程序正在運行,所有初始化已完成'的事件?

把它連接到視圖模型感覺不對?

爲了具體一點,我想作爲Visual Studio並加載'最近的解決方案',如果用戶已經在首選項中選擇了它。如果用戶通過GUI手動加載解決方案,我在MainFormViewModel中啓動流程,並且可以在那裏處理構造函數的最後一行中的加載?

有什麼想法?

安德斯,丹麥

回答

2

Windows.Interactivity方法或從構造函數異步加載它們的首選項同樣可行 - 如果您使用MefedMVVM框架,則存在替代方案。

您也可以導入IContainerStatus附着於該圖是從視圖模型完全加載(因此沒有忘記做在XAML)更多信息,請here

+0

+1,我完全忘記了`MEF`。 – decyclone 2011-02-04 15:48:03

0

你能做的就是用你的MainFormLoaded事件(這需要加載的解決方案之一)。

使用Windows.InteractivityEventTrigger將命令附加到Loaded事件。在該命令的執行上,加載解決方案。

0

我會介紹控制器這是負責UI工作流程。他們知道應用程序何時啓動並且可以執行命令。這不違反MVVM模式。如果您對這項工作感興趣,那麼您可能會發現有趣的示例應用程序WPF Application Framework (WAF)

0

我真的想避免從視圖模型構造函數中調用方法 - 在我看來,激活從構造事件的正是這樣做的(或至少使用棱鏡時,因爲我(應該提到,)

。我最終做了簡單的事情,並在施工結束後簡單地調用我的主視圖模型上的Loaded方法。

儘管如此,斯科特挑出了答案 - 謝謝大家花時間,甚至欣賞你的觀點如果我最終選擇了另一種方式。

丹麥安德斯

 var mainViewProvider = ObjectFactory.GetInstance<IMainViewProvider>(); 
     var mainWindowViewModelProvider = ObjectFactory.GetInstance<IMainWindowViewModelProvider>(); 

     var mainWindow = mainViewProvider.GetView(); 
     var mainWindowViewModel = mainWindowViewModelProvider.GetViewModel(); 
     mainWindow.DataContext = mainWindowViewModel; 

     mainWindowViewModel.Loaded(Settings.Default.LoadLatestOnStart); 

     mainWindow.Show(); 
0

這沒關係,如果當您設置在代碼方面,但如果你從XAML做到這一點 - 爲的透明度和靈活起見,應該考慮支持代碼和XAML。

另一種方法可以是在符合某些標準時從xaml觸發模型上的某些內容。

我相信故事板可以用於這種方法。

/Torben Falck,Strongminds,Denmark,www.strongminds.dk

+0

對不起,這是Anders提供的例子,他在代碼中初始化模型(請參閱兩篇文章) – 2011-02-08 10:25:34