我有一個窗口,其datacontext是一個視圖模型。現在,在虛擬機和窗口(視圖)的範圍之外,我有一個將被調用的方法。該方法需要顯示窗口並讓用戶更改一些內容,然後當用戶完成時,窗口需要關閉並且方法繼續。棘手的是,我在窗口綁定了視圖模型中的命令按鈕。這些命令觸發'userCancelled'和'userOked'等事件。所以我想要捕捉這些事件以瞭解何時關閉窗口並繼續使用該方法。等待窗口關閉並捕獲窗口事件
在窗口上,如果我使用ShowDialog,事件不會被捕獲(我假設因爲線程綁在等待對話框關閉)。但是,如果我使用Show,該方法將繼續。我需要它等待。我試過Thread.Sleep,直到某個布爾值被打開,但是也綁定了線程,並使窗口不可用(使用.Show())。
我試過做一個backgroundWorker,但我仍遇到同樣的問題。
我明白我可以在按鈕上使用codebehind,但對於OK按鈕,viewModel必須驗證其狀態是否有效。有觀點諮詢視角模型打敗MVVM的鬆耦合風格的重點,對嗎?
我正在自己學習WPF和MVVM,並且我希望做到這一點,並在實際的情況下堅持優秀的設計原則。我應該怎麼做?我究竟做錯了什麼?謝謝。
FYI現在我剛剛添加了Window屬性到ViewModel,並且我需要時在viewmodel中調用window.close()。我很想知道在MVVM中執行此操作的「正確」方法。 – 2012-04-06 14:49:37
更新:在視圖模型中創建一個CloseWindow Action,並將窗口和視圖模型綁定在一起,通過匿名委託設置該操作等同於窗口的Close()方法(我認爲?:)將在時間允許的情況下研究棱鏡。 – 2012-04-09 14:15:52