如何使用中介模式在MVVM中打开/显示新窗口?
我对WPF和MVVM范式非常陌生,我正在努力吸收它。我遇到的问题看起来很多MVVM创始人都面临着同样的问题&似乎没有简单的方法。所以,为了使问题域保持简单,这里只是一个实验性的工作 我有一个带有“新”按钮的主窗口。我想在单击此按钮时显示NewWindow.xaml的实例。如何从MainWindowViewModel执行此操作?中介模式能帮上忙吗?请提供任何良好的实施参考如何使用中介模式在MVVM中打开/显示新窗口?,mvvm,window,modal-dialog,viewmodel,Mvvm,Window,Modal Dialog,Viewmodel,我对WPF和MVVM范式非常陌生,我正在努力吸收它。我遇到的问题看起来很多MVVM创始人都面临着同样的问题&似乎没有简单的方法。所以,为了使问题域保持简单,这里只是一个实验性的工作 我有一个带有“新”按钮的主窗口。我想在单击此按钮时显示NewWindow.xaml的实例。如何从MainWindowViewModel执行此操作?中介模式能帮上忙吗?请提供任何良好的实施参考 我在主窗口上还有一个“关闭”按钮&我想在单击这个按钮时退出应用程序。我再次需要帮助:(我将对话框代码放入视图的CodeBehi
我在主窗口上还有一个“关闭”按钮&我想在单击这个按钮时退出应用程序。我再次需要帮助:(我将对话框代码放入视图的CodeBehind中。我仍然通过ViewModel传递命令,但ViewModel调用视图的实现并获得结果 假设我有一个主窗口视图(xaml)和一个主窗口视图模型,我想保存一个文件 在codebehind视图(MainWindow.xaml.cs)中,我添加代码来创建对话框并返回保存文件名:
public FileInfo OpenSaveFileDialog(string title, string filter)
{
var dialog = new SaveFileDialog
{
Filter = filter,
Title = title
};
var result = dialog.ShowDialog();
if (!result.Value) return null;
return new FileInfo(dialog.FileName);
}
在ViewModel中,我有一个DoSaveFile()方法:
在MainWindow.xaml中,我有一个绑定到委托命令的按钮:
<Button Content="Save File" Command="{Binding SaveFile}"/>
与MVP一样,这个实现也很健谈,但它在测试和分离关注点方面非常有效。对我来说,将窗口打开机制留给View类是有意义的,尽管它感觉有点像一个活动视图。我刚才也遇到过同样的问题 至少我使用了一个非常简单的方法,我很满意。这是我的解决方案 在viewmodel中,只需编写一行代码:
var result = this.uiDialogService.ShowDialog("Dialogwindow title goes here", newdialogwindowVMgoeshere);
//do what you want with the dialogresult
ViewModel如何引用视图以调用公共成员(OpenSaveFileDialog)在视图实例中?我认为viewmodel会得到类似IView接口的构造函数参数。视图当然会实现IView并传递给viewmodel,因为IView我也在寻找一个好的模式来显示viewmodel中的另一个窗口。但我认为你的解决方案不好。viewmodel不应该知道任何有关视图的信息。最好是ViewModel公开一个事件,并且View处理它以显示新窗口。
var result = this.uiDialogService.ShowDialog("Dialogwindow title goes here", newdialogwindowVMgoeshere);
//do what you want with the dialogresult