【发布时间】:2016-02-18 07:45:52
【问题描述】:
我有一个窗口,其中包含一个按钮AddParameter。
此 Button 有一个名为 Button_Click 的事件。
停留在 MVVM 模式中,是否允许使用简单的 Button_Click 打开一个新窗口?据我了解,View 的代码隐藏仍然算作 View:
private void Button_Click(object sender, RoutedEventArgs e) {
AddParameterWindow addParamWindow = new AddParameterWindow();
addParamWindow.Show();
}
用 ICommands 做这件事似乎没有必要,所以我想知道这是否仍然算作一个干净的 MVVM 解决方案。
【问题讨论】:
-
好吧,如果您使用“Button_Click”,那么您已经不在 MVVM 中了。为什么不用客户端脚本打开窗口?
-
你可以争论它。 MVVM 的原因是为了拆分逻辑和表示。如果您需要打开一个窗口或显示另一个视图,无论您选择哪种表示机制,我都会说它算作逻辑并且您违反了 MVVM 模式。如果它不是常见的逻辑,您可以使用您的版本。但我喜欢摆脱背后的每一点代码,并尝试使用单独的视图控制器、事件总线等来解决此类问题。但都有缺点
-
@Jurion 客户端脚本?这是wpf先生。
-
人们可以对 MVVM 非常了解,但我发现没有实际理由不将事件处理程序放在代码隐藏中。我会避免放置您想要为其编写单元测试的任何逻辑,但是对于纯粹与视图相关的东西(如您在示例中所使用的),您并没有违反我定义的模式。不过,我会问,窗户是否是您真正需要的。如果您可以摆脱只是浮动或换出用户控件,您可能会发现它会带来更好的用户体验并且更适合 MVVM 模式。
-
@BoeseB 我明白了。所以基本上它是正确的,但不一定是一个很好的选择。谢谢。