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