在WPF中使用MVVM打开新窗口的推荐方法是什么?

Dan*_*iel 4 c# wpf events mvvm icommand

各位大家好,并提前感谢您的时间.

我正在使用WPF学习MVVM,用于我正在编写的小型Biz App.我已经阅读了很多关于MVVM模式的文章,并发现其中一个关键领域是尽可能地将ViewModel与View分离.

我想在我的应用程序中打开一个新窗口,但我不确定是应该使用ICommand从ViewModel打开它还是使用标准事件直接从视图打开它.我工作的人建议我应该使用命令,但后来我认为这意味着在我的ViewModel中引用了一个View,根据我的理解,这正是MVVM模式关注的避免.

我的理解是,如果一个窗口仅用于导航目的,打开新窗口的过程对模型没有影响,那么我应该使用标准事件将所有这些保留在视图上.

我知道在sw开发过程中,所有东西都"依赖",但我猜我的问题是有"正确"/标准的方法吗?

最好的问候,丹尼尔

Dea*_*uga 5

是的,VM应该使用Views可以订阅的事件与Views进行通信...

在VM中:

public event EventHandler<NotificationEventArgs<string>> DisplayOptionsNotice;  
Run Code Online (Sandbox Code Playgroud)

在视图中:

private readonly MainViewModel mvm;
...
mvm = DataContext as MainViewModel;
mvm.DisplayOptionsNotice += DisplayOptionsWindow;
...
private void DisplayOptionsWindow(object sender, NotificationEventArgs<string> e)
{
    ...  
    optionsWindow = new OptionsWindow { Owner = this };
    optionsWindow.ShowDialog();
    ...
}
Run Code Online (Sandbox Code Playgroud)