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

时间:2016-11-19 13:50:44

标签: wpf mvvm prism

请告知以下问题。 我是WPF,Prism和MVVM的新手。

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

我们目前有应用程序的UI结构,主窗口,有菜单和带有(保存,添加,编辑等命令)的工具栏,它还有MainRegion,我们使用棱镜AutoWire加载绑定到其ViewModels的不同视图vm功能(导航)

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

现在出现两个问题:

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

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

  3. 让我们说我们关注了MainWindow:

    MainWindow
        - Menu
        - ToolBar
        - ContentControl (Region Manager)
    

    让我们说用户选择了一些菜单项,导致导航无法说设置.xaml

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

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

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

    通过发送活动视图名称    _eventAggregator.GetEvent()出版(有效收视);

    有人能指出我们这种UI实现的正确方法吗?感谢

1 个答案:

答案 0 :(得分:0)

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