0

我在 Shell-Toolbar 区域和内容区域中有两个区域。内容区域有许多视图——父窗口和子窗口。当子窗口弹出时,工具栏区域没有被禁用。应该怎么做才能禁用工具栏区域?

4

1 回答 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 回答