WPF:在Modal Windows中使用RoutedCommand MVVM方式

时间:2015-09-07 05:43:13

标签: .net wpf mvvm routed-commands

我有一个WPF应用程序,我试图以MVVM模式实现(尽可能多)。我的一个视图模型打开一个子窗口,其代码如下:

SomeChildWindow childWin = new SomeChildWindow();
childWin.DataContext = someChildViewModel;
childWin.ShowDialog();

我遇到的问题是我在SomeChildWindow中使用的路由命令未收到:

<Button Content="Do Work" Command="root:GlobalCommand.DoWork"/>

GlobalCommand是一个静态类,DoWork是一个RoutedUICommand。我有DoWork绑定到我的主视图模型,代码如下:

//Method inside the main view model
public void BindGlobalCommands(Window win)
{
    win.CommandBindings.Add( new CommandBinding
        ( GlobalCommand.DoWork, (s, e) => { this.DoSomeWork(); } ) );
}

我做了一些研究,我很确定我遇到的问题与问这个问题的人有同样的问题:WPF Routed Commands and ShowDialog Windows。但是,提供给该问题的答案要求父视图模型直接了解自己的视图,而我的视图并不是

我是否以正确的MVVM方式生成窗口?

如何在我的子窗口中使用RoutedCommand

1 个答案:

答案 0 :(得分:0)

对于对话框,我创建了单独的ViewModel,它们可以是主ViewModel的一部分。

主ViewModel实例化对话框的VM,创建Dialog,设置DataContext并等待对话框关闭(如果是模态)

Dialog使用对话框的ViewModel上的命令。

一旦Dialog关闭,主ViewModel会查看Dialog(Yes,No,Cancel,Ok,...)的结果,该结果可以是对话框VM的属性。基于此结果,主VM然后使用对话框的内容来执行某些命令。

通过这种方式,对话框可以重复使用,主VM可以继续控制。