gpt4 book ai didi

.net - WPF:在模态窗口中以 MVVM 方式使用 RoutedCommand

转载 作者:行者123 更新时间:2023-12-03 10:44:35 25 4
gpt4 key购买 nike

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

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

我遇到的问题是我在 SomeChildWindow 中使用的 RoutedCommand没有收到:
<Button Content="Do Work" Command="root:GlobalCommand.DoWork"/> GlobalCommand是一个静态类和 DoWork是一个 RoutedUICommand。我有 DoWork使用如下代码绑定(bind)到我的主视图模型:
//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 .但是,为该问题提供的答案要求父 View 模型直接了解其自己的 View ,而我的却没有

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

如何使用 RoutedCommand在我的 child 窗口?

最佳答案

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

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

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

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

这样,对话框是可重用的,并且主 VM 保持控制。

关于.net - WPF:在模态窗口中以 MVVM 方式使用 RoutedCommand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32431794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com