2013-02-21 77 views
4

我正在開發一個WPF MVVM應用程序,它利用MVVMLightToolkit作爲第三方helper.My scenarion如下:回調到主窗口

我有一個主窗口,同時關閉主窗口,我必須顯示一個新的對話窗口(保存更改對話框窗口)以確認用戶是否必須保存他在應用程序中對狀態文件所做的更改或而不是。我如何在MVVM中處理這種情況?通常爲了顯示一個新窗口,我正在使用MVVMLight Messenger class。在這種情況下,我打開保存更改對話框窗口主窗口代碼後面。我需要回調Main根據所選用戶選項(保存,保存/退出,取消)從保存更改對話框窗口中查看模型,並基於此我必須檢查是否必須關閉主窗口。什麼是處理這種情況的最佳MVVM方法?

回答

1

剛剛從/到視圖模型傳遞消息。

查看

private void Window_Closing(object sender, CancelEventArgs e) 
{ 
    Messenger.Default.Send(new WindowRequestsClosingMessage(
     this, 
     null, 
     result => 
     { 
      if (!result) 
       e.Cancel = true; 
     }); 
} 

視圖模型

Messenger.Default.Register<WindowRequestsClosingMessage>(
    this, 
    msg => 
    { 

     // Your logic before close 

     if (CanClose) 
      msg.Execute(true); 
     else 
      msg.Execute(false); 
    }); 

消息

public class WindowRequestsClosingMessage: NotificationMessageAction<bool> 
{ 
    public WindowRequestsClosingMessage(string notification, Action<bool> callback) 
     : base(notification, callback) 
    { 
    } 

    public WindowRequestsClosingMessage(object sender, string notification, Action<bool> callback) 
     : base(sender, notification, callback) 
    { 
    } 

    public WindowRequestsClosingMessage(object sender, object target, string notification, Action<bool> callback) 
     : base(sender, target, notification, callback) 
    { 
    } 
} 

MVVM燈的NotificationMessageAction <TResult>允許您傳遞消息並獲得TResult類型的結果。要將TResult傳遞迴請求者,請像示例一樣呼叫Execute()

+0

謝謝Jota。我會檢查並回復你。 – Dennis 2013-02-21 09:58:41

0

你爲什麼不這樣做你的閉合事件如下:

private void Window_Closing(object sender, CancelEventArgs e) 
    { 
     SaveDialog sd = new SaveDialog(); 
     if (sd.ShowDialog() == false) 
     { 
      e.Cancel = true; 
     } 
    } 
+0

SaveDialog.ShowDialog()返回一個可爲空的bool值。我的應用程序是不是Windows的WPF應用程序。 – Dennis 2013-02-21 08:47:09

+0

因此,將SaveDialogResults.Cancel改爲true或false或null,無論您想要什麼^^ – 2013-02-21 08:48:35

+0

感謝您的迴應。實際上,使用RelayCommand從ViewModel處理Window_Closing命令。從該命令處理程序中,使用Messenger(MVVMLight),我從後面的主窗口代碼中顯示SaveChanges對話窗口。我需要回調主視圖模型命令處理程序,並從保存撥號日誌窗口傳遞選定的選項。希望你現在瞭解我的情況。 – Dennis 2013-02-21 08:58:11