我在Shell-工具栏区域和内容区域中有两个区域。 内容区域有许多视图 - 父窗口和子窗口。弹出子窗口时未禁用工具栏区域。应该怎么做才能禁用工具栏区域?
答案 0 :(得分:0)
您可以将viewModel的主要内容的属性IsEnabled
绑定到布尔属性IsPopupGone
。在工具栏的构造函数中,将EventAggregator订阅到事件PopupWindowStateChanged
,将有效负载订阅为布尔值。然后,当您的弹出窗口显示时,使用True发布此事件,并在关闭时发布为False。
private bool isPopupGone = true; // default/original state assumed to be no childs showing
public bool IsPopupGone
{
get { return isPopupGone; }
set { isPopupGone = value; /* implement notifypropertychanged */ }
}
public ToolbarViewModel(IEventAggregator eventAggregator)
{
EventAggregator = eventAggregator;
EventAggregator.GetEvent<PopupWindowStateChanged>().Subscribe(UpdateEnabledState);
}
public void UpdateEnabledState(bool isPopupShowing)
{
IsPopupGone = !isPopupShowing;
}
<UserControl x:Class="ToolbarView">
<Menu IsEnabled="{Binding Path=IsPopupShown, Mode=OneWay}">
...
</Menu>
</UserControl>
弹出窗口只需在适当的时候执行以下操作,无论是在创建/显示(true)时,还是在关闭时(false)
EventAggregator.GetEvent<PopupShowingChanged>().Publish(true); // false
我不喜欢IsPopupGone属性的命名,我宁愿使用IsPopupShowing并在XAML中使用转换器,但这对您/其他人来说可能更容易。