我有一个类似于下面显示的模型的 WPF/prism 应用程序:
两个 TabControl 都包含一个单独的 Prism 区域,第二个区域嵌套在第一个区域中。现在工具栏应该根据当前处于活动状态的视图来激活/停用项目。
工具栏当前在 shell 中定义。
我尝试使用某种注册表,每个 ViewModel 都可以注册它支持的工具栏命令。但是,我随后意识到工具栏无法知道哪个视图(因此哪个视图模型)处于活动状态。
问题出在嵌套中,否则我可能通过将 TabControl.SelectedItem 属性绑定到工具栏并从上面使用我的注册表来实现我想要的。
也许有更好的方法来做到这一点?或者让工具栏找出哪个视图处于活动状态的方法?
编辑:我现在尝试使用本文中描述的 ActiveAware ViewModel:http: //www.codeproject.com/Articles/56826/ViewModel-Active-Awareness-in-a-Prism-Based-Applic,但是我现在有了当我从选项卡“一”切换到选项卡“二”并返回时,不会触发嵌套选项卡的“第一个选项卡”GotFocus 事件,这意味着工具栏将代表错误的视图。
也许这是要走的路?
编辑 2:问题似乎是第二个 tabcontrol 不在它自己的作用域内。我正在使用 ViewDiscovery 方法向我的区域添加视图,因此我没有明确地在范围内创建 regionmanager。SyncActiveState 似乎仅适用于范围区域,因为第一个 tabcontrol 视图模型在切换视图时正确更新。
有没有办法使用 XAML 创建一个作用域区域而不是普通区域?