我打破規則來實現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;
}
});
你也可以離開接收機遠離發送時,爲了保持視圖類的視圖模型,但任何一種方式,我認爲這是一個可以接受的解決方案:)