0

我有这个 UI 外壳:
在此处输入图像描述

在刷新按钮上,我打电话_eventAggregator.GetEvent<RefreshEvent>().Publish();

并且标签中所有区域的代码都订阅了这个事件。

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

编辑 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,如果我单击选项卡,它总是会改变(正常工作)。

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

4

1 回答 1

1

您不应该为此使用事件聚合器。您应该使用 CompositeCommands。他们甚至在自动实施 IActiveAware 时监控活动的选项卡/虚拟机。

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

于 2016-12-22T18:17:57.820 回答