什么是接口功能区控制与Caliburn微的好方法



我在我的项目中使用Caliburn Micro,我决定使用Fluent Ribbon作为UI的一部分。我的ShellView非常简单,它的布局是这样的:

  • Ribbon Control with 4 tabs.
  • ActiveItem。

活动项根据功能区所选择的选项卡动态更改。

问题:

使用Ribbon控件作为我当前活动的ViewModel (ActiveItem)的第二个视图,同时保持模块化和继承CM本身的所有优点的正确方法是什么?此外,在我的ViewModels之间"共享"我的Ribbon控件需要什么?

细节:

我的ShellViewModel的类型是"Conductor.Collection"。OneActive",它将ActiveItem更改为与选定选项卡关联的特定ViewModel(当事件被触发时)。

我的Ribbon在XAML中是这样定义的:
<ContentControl x:Name="RibbonBar" Micro:View.Model="{Binding ActiveItem}" Micro:View.Context="Ribbon" />

如它所示,Ribbon控件被绑定到当前活动的项,作为它的上下文视图。这实际上适用于一个视图,因为由于默认的CMs约定,它在子命名空间中寻找上下文视图(例如,如果我到视图的路径是 views)。TasksTabView,它将在Views.TasksTab.Ribbon中查找上下文视图。

问题是,当我改变ActiveItem,上下文视图不能再定位了,由于不同的命名空间,所以它只适用于一个选项卡。

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

谢谢。

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

我确实设法编写了额外的ViewLocator逻辑来定位我的Ribbon,但这产生了一些问题(似乎CM中的绑定只工作一次,所以在Ribbon被定位并绑定到VM之后,额外的上下文视图更改什么也不做。)还有一些很难发现的bug)。

我已经采取了不同的方法。我已经将Ribbon分离到它自己的ViewModel,并将其与其他模块组合到shell中。它使用EventAggregator,我还在必要的地方注入了它。这不是我所希望的,但它现在可以工作了。

如果有人贴出更好的答案,我一定会接受的。

相关内容

  • 没有找到相关文章

最新更新