WPF:在Modal Windows中使用RoutedCommand是MVVM的一种方式

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

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

我遇到的问题是我在SomeChildWindow使用的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和ShowDialog Windows。 然而,为这个问题提供的答案要求父视图模型直接了解自己的观点,而我自己的观点并不是

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

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


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

主ViewModel实例化对话框的虚拟机,创建对话框,设置DataContext并等待对话框关闭(如果它是Modal)

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

一旦关闭对话框,主ViewModel就会查看对话框中虚拟机的属性对话框(Yes,No,Cancel,Ok,...)的结果。 根据这个结果,主VM然后使用对话的内容来执行一些命令。

通过这种方式,对话框可以重用,主虚拟机保持控制。

链接地址: http://www.djcxy.com/p/9605.html

上一篇: WPF: Using RoutedCommand in Modal Windows the MVVM way

下一篇: WPF Navigate through views using MVVM pattern