У меня есть эта оболочка интерфейса:
Призма. EventAggregator в настоящее время активная вкладка
На кнопку обновления, я называю _eventAggregator.GetEvent<RefreshEvent>().Publish();
и код во всех регионах в закладках подписались на это событие.
Задача: Проблема в том, что я хочу обновлять только текущую активную вкладку. Но в моем случае все вкладки обновляются. Есть ли хорошая практика для решения этой проблемы?
Edit 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
, она всегда меняется, если я нажимаю вкладки (работает справа).
Проблема: Если вкладка не активна, команды на этой вкладке запускаются на моей глобальной составной кнопке, но это не должно.
Хороший подход должен были бы передать значение наряду с событием, т.е. строкового значения (которое может содержать, например, название вкладки, чтобы быть активным), а затем он может быть проверен в обратном вызове абонента, нужно ли обновлять код на определенной вкладке. –