WPF Prsim MVVM 应用程序,多个视图,混乱的命令和事件

WPF Prsim MVVM application , multiple views , Mess with commands and Events

请就以下问题提出建议。 我对 WPF 、 Prism 和 MVVM 还很陌生。

我们已经开始计划用 C++ 和 WPF 端口编写我们的旧应用程序的脏乱版。

我们目前有以下 UI 应用程序结构,Main Window,有一个菜单和一个带有(保存、添加、编辑等命令)的工具栏,它还有我们所在的 MainRegion使用 prism AutoWire vm 功能(导航)加载绑定到其 ViewModel 的不同视图

现在的问题是,所有视图都应该接受用于保存创建编辑的工具栏命令。并且每个命令只能在当前视图中执行。

现在出现两个问题:

  1. 为每个 Active View 的每个命令绑定 CanExecute,

  2. 对每个视图执行不同的保存操作。

假设我们有以下 MainWindow:

MainWindow
    - Menu
    - ToolBar
    - ContentControl (Region Manager)

假设用户选择了一些菜单项,这导致导航不会说 settings.xaml

此时设置未更改,因此应禁用工具栏上的保存按钮。然后我们正在更改一些设置,ViewModel isDirty 属性 更改了,如何将此信息发送到按钮状态?

第二个问题,保存命令在 MainWindow ViewModel 上执行,而不是在 Settings ViewModel 上执行,目前我们正在使用 PubSubEvents 并且每个 viewModel 都订阅 SaveEvent,:

   if (viewName.Contains("Settings"))
        {
            this.Settings = _settingsService.Save();
        }

其中活动视图名称通过以下方式发送 _eventAggregator.GetEvent().发布(ActiveView);

谁能告诉我们这种 UI 实施的正确方法?谢谢

您想将 CompositeCommands 用于您的高级命令。确保在定义复合命令时注册它以监视 IsActiveAware。然后每个 VIew 的 VM 都应该实现 IActiveAware 接口。在您的实现中,当 IsActive 值更改时,更新 DelegateCommands 的 IsActive 属性。此外,请确保使用 CompsoiteCommands 注册您的 VM 命令。现在它将完全按照您的意愿工作。