将Ribbon控件与Caliburn Micro接口的好方法是什么?

将Ribbon控件与Caliburn Micro接口的好方法是什么?

问题描述:

我为我的项目使用Caliburn Micro,并决定使用Fluent Ribbon作为UI的一部分。我的ShellView非常简单,它的布局如下:将Ribbon控件与Caliburn Micro接口的好方法是什么?

  • 功能区控制4个选项卡。
  • ActiveItem。

活动项目根据功能区的选定选项卡动态更改。

问:

什么是用丝带控件作为我的当前活动视图模型(ActiveItem)的第二图的正确方法,同时保持模块化和所有配备CM本身继承的好东西?另外,在我的ViewModels中“共享”我的Ribbon控件需要什么?

详情:

我ShellViewModel的类型是“Conductor.Collection.OneActive”的,它改变了ActiveItem特定视图模型我选择的选项卡(在触发事件)相关联。

我的色带在XAML定义是这样的:

<ContentControl x:Name="RibbonBar" Micro:View.Model="{Binding ActiveItem}" Micro:View.Context="Ribbon" /> 

,因为它表明,织带控制绑定到,因为它的上下文视图当前活动项目。这实际上适用于一个视图,因为由于默认的CM约定,它在子命名空间中查找上下文视图(例如,如果我的视图路径是Views.TasksTabView,它将查找Views上的Context视图.TasksTab.Ribbon)。

问题是,当我更改ActiveItem时,由于命名空间不同,无法再定位上下文视图,所以它只适用于一个Tab。

我也试着写我自己的ViewLocator约定,但我没有成功。

谢谢。

不幸的是,由于没有答案,我会自己回答。

我确实设法编写了额外的ViewLocator逻辑来定位我的功能区,但是这造成了一些问题(似乎在CM中的绑定只能工作一次,所以在功能区被定位并绑定到虚拟机之后,没有什么,也有一些很难找到的错误)。

我采取了不同的方法。我已将Ribbon分离到它自己的ViewModel中,并将其与其余模块进行合成。它使用EventAggregator,我也在需要的地方注入它。不是我希望的方法,但它现在可行。

如果有人发布更好的答案,我会definitelly接受那一个。