简体   繁体   English

在WPF MVVM中对子按钮登录事件启用父窗口菜单

[英]Enable Parent window menus on child button login event in WPF MVVM

I have a scenario, I am having a MainWindow.xaml. 我有一个场景,我有一个MainWindow.xaml。 This window has menus (which are initially disabled) and user controls. 该窗口具有菜单(最初被禁用)和用户控件。 On one of the user control I have a login button clicking which Login pop up window open up. 在一个用户控件上,我有一个登录按钮,单击该按钮会打开“登录”弹出窗口。 After successful login I want to Enable my main window disabled menu items. 成功登录后,我要启用主窗口已禁用的菜单项。 How can I achieve this functionality in WPF MVVM? 如何在WPF MVVM中实现此功能?

Are you using any kind of MVVM Framework? 您正在使用任何一种MVVM框架吗?

If so. 如果是这样的话。

Most of them have some kind o event service. 他们中的大多数人都提供某种事件服务。 For example Caliburn.Micro has EventAggregator. 例如Caliburn.Micro具有EventAggregator。

I would call such event in child view model and subscribe to it in parent one. 我会在子视图模型中调用此类事件,并在父视图模型中订阅该事件。 In your scenario it would be something like that (in Caliburn.Micro): 在您的方案中,将是这样的(在Caliburn.Micro中):

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

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

With the use of such event service you achieve separation of your ViewModels and you much flexibility because you can handle such LoginEvents in other view models in your application. 通过使用此类事件服务,您可以实现ViewModels的分离,并具有很大的灵活性,因为您可以在应用程序的其他视图模型中处理此类LoginEvents。

As mentioned before many MVVM frameworks has such service: 如前所述,许多MVVM框架都提供以下服务:

If not. 如果不。

You can assembly your own event aggregator. 您可以组装自己的事件聚合器。
Here are some sources which can be helpful in such homebrew implementation: 以下是一些有助于实施自制程序的资源:

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM