在 WPF 的 xaml 视图中打开另一个窗口

Rah*_*l W 4 c# wpf xaml mvvm viewmodel

我是 Wpf 的新手,并遵循 MVVM 模式来设计我的应用程序。我有一个 ViewModel 和一个视图。根据设计,我的 View 知道我的 ViewModel,反之则不然。如果我想在单击按钮时打开另一个窗口,我可以使用一个命令,当用户单击时,该命令将被路由到我的 ViewModel。

但是我将如何创建一个具有自己的视图和 ViewModel 的窗口。我对此有些困惑。我想从 Xaml 本身调用新窗口,因为我的 ViewModel 不知道另一个视图,可能它是视图模型。

为了简单起见,

View1 -> (bound to) ViewModel1
View1 -> Button1.Click -> Command(bound to) ViewModel1
---- how to open View2 -> (bound to) ViewModel2------
Show View2.
Run Code Online (Sandbox Code Playgroud)

谢谢

Xca*_*r37 5

我只是从视图 1 的代码隐藏中调用Show来打开视图 2。不应涉及来自视图 1 的 ViewModel。

像这样:

private void Button_Click(object sender, RoutedEventArgs e)
{
    new View2().Show();
}
Run Code Online (Sandbox Code Playgroud)

你的下一个想法可能是“这不是违反了 MVVM 吗?” 不,我不会这么说。如果要认为 ViewModel 是 MVVM 的干净实现,则它不应直接控制 UI 元素。如果您希望 ViewModel 中的某些内容触发 Window 打开,您可以随时使用事件或像 Caliburn 这样的 3rd 方库来轻松实现这一点,而无需担心耦合。