请告知以下问题。 我是WPF,Prism和MVVM的新手。
我们已经开始计划使用C ++,WPF端口编写的旧应用程序的脏版本。
我们目前有应用程序的UI结构,主窗口,有菜单和带有(保存,添加,编辑等命令)的工具栏,它还有MainRegion,我们使用棱镜AutoWire加载绑定到其ViewModels的不同视图vm功能(导航)
现在的问题是,所有视图都应该接受“保存创建编辑”的工具栏命令。每个命令只能在当前视图中执行。
现在出现两个问题:
为每个Active View的每个命令绑定CanExecute,
在每个视图上保存时执行不同的操作。
让我们说我们关注了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实现的正确方法吗?感谢
答案 0 :(得分:0)
您希望将CompositeCommands用于高级命令。确保在定义composit ecommand时将其注册以监视IsActiveAware。然后,每个VIew的VM都应该实现IActiveAware接口。在您的实现中,当IsActive值更改时,更新DelegateCommands的IsActive属性。此外,请确保使用CompsoiteCommands注册VM命令。现在它将完全按照您的意愿工作。