在刷新按钮上,我拨打_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
的状态,如果我点击标签(正常工作),它总会被更改。
问题: 如果tab未激活,则该选项卡中的命令会触发我的全局复合按钮,但不能触发。
答案 0 :(得分:1)
您不应该为此使用事件聚合器。您应该使用CompositeCommands。他们甚至可以在自动实施IActiveAware时监控活动标签/虚拟机。
以下是文档:http://prismlibrary.readthedocs.io/en/latest/WPF/09-Communication/#solution-commanding