C# 在WPF MVVM中的子按钮登录事件上启用父窗口菜单

C# 在WPF MVVM中的子按钮登录事件上启用父窗口菜单,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我有一个场景,我有一个MainWindow.xaml。此窗口具有菜单(最初禁用)和用户控件。在其中一个用户控件上,我有一个登录按钮,单击打开的登录弹出窗口。成功登录后,我想启用主窗口禁用的菜单项。如何在WPF MVVM中实现此功能?您是否使用任何类型的MVVM框架 如果是。 他们中的大多数人都有某种活动服务。例如Caliburn.Micro有EventAggregator 我会在子视图模型中调用这样的事件,并在父视图模型中订阅它。 在您的场景中,可能是这样的(在Caliburn.Micro中):

我有一个场景,我有一个MainWindow.xaml。此窗口具有菜单(最初禁用)和用户控件。在其中一个用户控件上,我有一个登录按钮,单击打开的登录弹出窗口。成功登录后,我想启用主窗口禁用的菜单项。如何在WPF MVVM中实现此功能?

您是否使用任何类型的MVVM框架

如果是。

他们中的大多数人都有某种活动服务。例如Caliburn.Micro有EventAggregator

我会在子视图模型中调用这样的事件,并在父视图模型中订阅它。 在您的场景中,可能是这样的(在Caliburn.Micro中):

类ChildViewModel
{
...
公共无效HandleLogin()
{
...
_发布(新的LoginEventArgs);
}
}
类ParentViewModel:IHandle
{
公共无效句柄(LoginEventArgs args)
{
..
}
}
通过使用此类事件服务,您可以实现视图模型的分离,并且可以在应用程序中的其他视图模型中处理此类登录,因此具有很大的灵活性

如前所述,许多MVVM框架都有这样的服务:

如果没有。

您可以组装自己的事件聚合器。
以下是一些有助于此类自制实现的资源:

class ChildViewModel
{
    ...
    public void HandleLogin()
    {
        ...
        _eventAggregator.Publish(new LoginEventArgs);
    }
}

class ParentViewModel : IHandle<LoginEventArgs>
{
    public void Handle(LoginEventArgs args)
    {
        ..
    }
}