【问题标题】:Prism. EventAggregator to currently active tab棱镜。 EventAggregator 到当前活动的选项卡
【发布时间】:2016-12-22 09:38:47
【问题描述】:

我有这个 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 的状态,如果我点击标签,它总是会改变(正常工作)。

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

【问题讨论】:

  • 一个好的方法是将一个值与事件一起传递,即一个字符串值(它可以包含,例如,要激活的选项卡的名称),然后可以在订阅者的回调,是否更新特定选项卡中的代码。

标签: c# design-patterns prism prism-5


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 2014-09-12
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 2018-11-07
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    相关资源
    最近更新 更多