如何根据选定的视图和视图模型使用上下文项更新我的功能区?

How can I update my ribbon with context items based on the selected view and view model?

在我的 Prism 应用程序中,我有一个功能区,我希望能够使用基于当前活动视图和视图模型的上下文命令对其进行更新。当最初打开视图时(在 OnNavigatedTo 中),我的功能区使用上下文命令进行了更新,但是当用户在我的选项卡控件中的项目之间单击时,我无法弄清楚如何更新我的功能区。

我计划使用 Prism 的 IEventAggregator 在用户单击新选项卡时发送 "active view changed" 事件,然后让每个视图模型订阅该事件并让视图模型如果活动选项卡项是该视图模型的选项卡,则更新功能区。问题是我需要我的事件数据包含一些参数来指定活动选项卡包含的内容,但我不知道如何确定哪个视图模型链接到活动选项卡控件项。

我如何知道哪个视图模型对应于选项卡控件项,或者是否有其他方法可以解决此问题?

您可以只让所选选项卡的视图模型完成工作,无需使事情过于复杂:

xaml:

<TabControl SelectionChanged="OnSelectionChanged"/>

代码隐藏:

private void OnSelectionChanged( object sender, SelectionChangedEventArgs e ) => (((sender as TabControl)?.SelectedContent as FrameworkElement)?.DataContext as IRibbonAwareViewModel)?.OnSelected();

选项卡视图模型实现的接口:

internal interface IRibbonAwareViewModel
{
    void OnSelected(); // <-- here the view model updates the ribbon
}