C# 棱镜标签内容和色带

C# 棱镜标签内容和色带,c#,.net,wpf,prism,ribbon,C#,.net,Wpf,Prism,Ribbon,我正在开发一个prism应用程序,顶部有一个功能区栏,左侧有一个了望栏和一个选项卡式内容区域(带有RegionaAdapter的tabcontrol) 我正在使用视图注入 我现在的问题是:当从一个现有tabitem切换到另一个tabitem时,如何将tabitem自己的tabcontrol(例如edituser按钮)注入功能区 我认为INavigationAware在这种情况下不起作用。(对吗?) 我所能想象的唯一方法就是钩住tabheader并在那里做一些事情 我很高兴你能给我的每一个解决方案

我正在开发一个prism应用程序,顶部有一个功能区栏,左侧有一个了望栏和一个选项卡式内容区域(带有RegionaAdapter的tabcontrol)

我正在使用视图注入

我现在的问题是:当从一个现有tabitem切换到另一个tabitem时,如何将tabitem自己的tabcontrol(例如edituser按钮)注入功能区

我认为INavigationAware在这种情况下不起作用。(对吗?)

我所能想象的唯一方法就是钩住tabheader并在那里做一些事情

我很高兴你能给我的每一个解决方案


提前感谢

我阅读了您对我的问题的回答,认为Prism的
事件聚合器可以帮助您。除其他功能外,它还设计用于方便模块间的通信。以下是您如何使用它的示例:

获取EventAggregator的实例。我在这里使用依赖注入:

// Ctor injection
private IEventAggregator _eventAggregator;
public YourViewModel(IEventAggregator eventAggregator)
{
    _eventAggregator = eventAggregator;
}
创建要发布的事件(参数用于有效负载)。在您的情况下,选项卡选择:

public class TabSelectedEvent:CompositePresentationEvent<object>{}
公共类选项卡SelectedEvent:CompositePresentationEvent{}
选中某个页签后发布事件

_eventAggregator.GetEvent<TabSelectedEvent>().Publish(null);
\u eventAggregator.GetEvent().Publish(null);
最后,订阅活动并响应:

_eventAggregator.GetEvent<TabSelectedEvent>().Subscribe(OnTabSelectedEvent);
\u eventAggregator.GetEvent().Subscribe(OnTabSelectedEvent);

现在,您应该可以开始了。

您的ribbonbar、outlookbar等是否在不同的模块中?您是否正在寻找一种将选项卡更改传达给功能区的方法?这正是您想要实现的。是的,它们在不同的模块中。我知道如何在模块之间进行通信的基础知识。本例中的问题是,我需要钩住TabItem的事件。但我更喜欢viewmodel/controller检测导航事件的解决方案(如INavigationAware和view discovery)。我认为INavigationAware不适用于选项卡控件。您可以使用AttachedBehavior钩住选项卡事件并相应地响应。如果你需要一个例子,我会更新我的答案。我现在得到了一个带有boolean类型附加属性的解决方案。我将其附加到tab控件。在PropertyChangedCallback中,我钩住tabcontrol的selectionchanged处理程序。在这个钩子中,我获取所选的选项卡,并检查该选项卡的datacontext是否属于我自己的类型ITabNavigationTarget,它实现了一个处理功能区注入的方法。这就是你的意思吗?或者有其他更好的解决方案吗?是的,这就是我的意思,我相信还有其他方法可以做到这一点。我想我还是更喜欢在你的情况下使用EventAggregator。