Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用中介模式在MVVM中打开/显示新窗口?_Mvvm_Window_Modal Dialog_Viewmodel - Fatal编程技术网

如何使用中介模式在MVVM中打开/显示新窗口?

如何使用中介模式在MVVM中打开/显示新窗口?,mvvm,window,modal-dialog,viewmodel,Mvvm,Window,Modal Dialog,Viewmodel,我对WPF和MVVM范式非常陌生,我正在努力吸收它。我遇到的问题看起来很多MVVM创始人都面临着同样的问题&似乎没有简单的方法。所以,为了使问题域保持简单,这里只是一个实验性的工作 我有一个带有“新”按钮的主窗口。我想在单击此按钮时显示NewWindow.xaml的实例。如何从MainWindowViewModel执行此操作?中介模式能帮上忙吗?请提供任何良好的实施参考 我在主窗口上还有一个“关闭”按钮&我想在单击这个按钮时退出应用程序。我再次需要帮助:(我将对话框代码放入视图的CodeBehi

我对WPF和MVVM范式非常陌生,我正在努力吸收它。我遇到的问题看起来很多MVVM创始人都面临着同样的问题&似乎没有简单的方法。所以,为了使问题域保持简单,这里只是一个实验性的工作

我有一个带有“新”按钮的主窗口。我想在单击此按钮时显示NewWindow.xaml的实例。如何从MainWindowViewModel执行此操作?中介模式能帮上忙吗?请提供任何良好的实施参考


我在主窗口上还有一个“关闭”按钮&我想在单击这个按钮时退出应用程序。我再次需要帮助:(

我将对话框代码放入视图的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