我在 Shell-Toolbar 区域和内容区域中有两个区域。内容区域有许多视图——父窗口和子窗口。当子窗口弹出时,工具栏区域没有被禁用。应该怎么做才能禁用工具栏区域?
问问题
222 次
1 回答
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 中使用转换器,但这可能更容易作为您/其他人的答案。
于 2013-09-18T15:15:09.930 回答