【发布时间】:2016-12-22 09:38:47
【问题描述】:
在刷新按钮上,我调用_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