2010-04-28 211 views
1

已經嘗試了一些不同的解決方案,我繼續回來了這一點。我需要一個Window.ShowDialog,通過UnityContainer使用ViewModelLocator類作爲工廠。對話框(以假亂真)

基本上我有一個View(和ViewModel),它在按鈕上按下視圖需要創建一個對話框(在它的構造函數中接受幾個參數),它將處理一些邏輯並最終將結果返回給調用者(以及它計算的所有邏輯的結果)。

也許我錯了stilll從Windows看着這形成觀點,但我確切地知道我想要做的,我想使用WPF和MVVM理想去做。我試圖爲一個項目做這項工作,並最終不想回到香草WPF,以使其工作。

回答

0

你可以做到這一點。只需創建一個頁面/用戶控件/窗口的實例並致電instance.ShowDialog()

Here's my T4 templates以產生與所述消息的視圖/視圖模型用於關閉窗口和其他技巧。

2

我打破規則來實現dialogwindow而是試圖將其減少到最低限度。我有一個方法OpenDialog在我BaseViewModel:

public void OpenDialog(DialogViewModel model) 
{ 
    this.MessengerInstance.Send<DialogViewModel, MainWindow>(model); 
} 

在我的主窗口:

Messenger.Default.Register<DialogViewModel>(this, model => 
     { 
      // Instantiate the dialog box 
      var dlg = new DialogWindow(); 
      // Configure the dialog box 
      dlg.Owner = this; 
      dlg.Content = model; 
      // Open the dialog box modally 
      dlg.ShowDialog(); 
     }); 

這樣,我只有我的視圖模型和我的MainView之間的鬆耦合。 您可以關閉這樣做,我BaseDialogViewModel有一個方法:

public void CloseDialog() 
    { 
     this.MessengerInstance.Send<PopUpAction, DialogWindow>(PopUpAction.Close); 
    } 

(PopupAction只是一個枚舉)和我DialogWindow寄存器爲:

Messenger.Default.Register<PopUpAction>(this, action => 
     { 
      switch (action) 
      { 
       case PopUpAction.Close: 
        this.Close(); 
        break; 
      } 
     }); 

你也可以離開接收機遠離發送時,爲了保持視圖類的視圖模型,但任何一種方式,我認爲這是一個可以接受的解決方案:)