【发布时间】:2011-01-07 17:07:28
【问题描述】:
在邻居帖子中:How should the ViewModel close the form? 我已经发布了如何使用 MVVM 关闭窗口的愿景。现在我有一个问题:如何打开它们。
我有一个主窗口(主视图)。如果用户单击“显示”按钮,则应显示“演示”窗口(模式对话框)。使用 MVVM 模式创建和打开窗口的更好方法是什么?我看到了两种通用方法:
第一个(可能是最简单的)。事件处理程序“ShowButton_Click”应该在主窗口后面的代码中实现,如下所示:
private void ModifyButton_Click(object sender, RoutedEventArgs e)
{
ShowWindow wnd = new ShowWindow(anyKindOfData);
bool? res = wnd.ShowDialog();
if (res != null && res.Value)
{
// ... store changes if neecssary
}
}
- 如果我们应该更改“显示”按钮状态(启用/禁用),我们将需要添加管理按钮状态的逻辑;
- 源代码与“旧式”WinForms 和 MFC 源代码非常相似 - 我不确定这是好是坏,请告知。
- 还有什么我错过的吗?
另一种方法:
在 MainWindowViewModel 中,我们将实现“ShowCommand”属性,该属性将返回命令的 ICommand 接口。依次命令:
- 将引发“ShowDialogEvent”;
- 将管理按钮状态。
这种方法更适合 MVVM 但需要额外的编码:ViewModel 类不能“显示对话框”所以 MainWindowViewModel 只会引发“ShowDialogEvent”,我们需要在 MainWindowView 的 MainWindow_Loaded 方法中添加事件处理程序,像这样:
((MainWindowViewModel)DataContext).ShowDialogEvent += ShowDialog;
(ShowDialog - 类似于 'ModifyButton_Click' 方法。)
所以我的问题是: 1. 你还有其他方法吗? 2. 您认为列出的其中一项是好是坏? (为什么?)
欢迎任何其他想法。
谢谢。
【问题讨论】:
-
我在this post 中回答了一个类似的问题,涉及一个非常简单的行为。
-
'ViewModel 类不能“显示对话框”'