棱镜。当前活动选项卡的 EventAggregator

Prism. EventAggregator to currently active tab

我有这个UIshell:

在刷新按钮上,我调用 _eventAggregator.GetEvent<RefreshEvent>().Publish();

并且tabs中所有地区的code都订阅了这个事件

问题: 问题是我只想更新当前活动的选项卡。但就我而言,所有选项卡都在更新。有解决这个问题的好方法吗?

编辑 1
在我看来,我实现了 IActiveAware

public partial class ShipsControlView : UserControl, IActiveAware
{
    public ShipsControlView()
    {
        InitializeComponent();
    }

    private bool isActive;

    public bool IsActive
    {
        get
        {
            return this.isActive;
        }
        set
        {
            if (this.isActive == value)
                return;

            this.isActive = value;

            var viewModelActiveAware = this.DataContext as IActiveAware;
            if (viewModelActiveAware != null)
                viewModelActiveAware.IsActive = value;

            this.OnIsActiveChanged();
        }
    }

    public event EventHandler IsActiveChanged;

    protected virtual void OnIsActiveChanged()
    {
        var handler = this.IsActiveChanged;
        if (handler != null)
            handler(this, EventArgs.Empty);
    }
}

将此视图添加到 tabControl:

<TabControl
        prism:RegionManager.RegionName="TabRegion2"
        ItemContainerStyle="{StaticResource HeaderStyle}"
        ></TabControl>

.

regionManager.RegisterViewWithRegion("TabRegion2", typeof(ShipsControlView));

我检查 IsActive 的状态,如果我单击选项卡,它总是会更改(正常)。

问题: 如果选项卡未处于活动状态,则该选项卡中的命令会在我的全局复合按钮上触发,但它不能。

您不应该为此使用事件聚合器。您应该使用 CompositeCommands。他们甚至在自动实施 IActiveAware 时监控活动 tabs/VMs。

这是文档:http://prismlibrary.readthedocs.io/en/latest/WPF/09-Communication/#solution-commanding