棱镜。当前活动选项卡的 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
我有这个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