如何在prism mef wpf中弹出另一个区域中的子窗口时禁用一个区域

时间:2013-09-12 18:26:47

标签: wpf prism mef

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

1 个答案:

答案 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中使用转换器,但这对您/其他人来说可能更容易。