使用IEventAggregator,是否可以先发布一个事件然后订阅它?

时间:2017-09-04 12:29:53

标签: wpf mvvm prism

也许我的实施方法是错误的,但在这里我的出路:

我目前使用MVVM和Prism开发应用程序,具有登录对话框和多个模块:

  1. <TextField fullWidth={true} floatingLabelText="Título" errorText="¡Ups! No deberías ver este mensaje." defaultValue={this.state.post.title} /> 订阅了一个事件:MainWindowViewModel,用于检查是否必须将模块名称添加到列表视图中;
  2. 启动时,它会动态加载文件夹中的所有模块:
    • 每个IModule类都会侦听一个LoginEvent:_ea.GetEvent<RegisterMenuItemEvent>().Subscribe(AddMenuItem, true);,用于检查用户是否具有导航到模块视图的权限;
    • 如果符合,则使用_ea.GetEvent<LoginEvent>().Subscribe(CheckRoles, true);方法发布一个事件,将模块注册为列表视图项:CheckRoles()
  3. 登录后
    • 它根据每个模块的给定角色将模块注册为listview菜单项:_ea.GetEvent<RegisterMenuItemEvent>().Publish(new MenuItem(null, View, ModuleName, GroupName));
    • 将经过身份验证的用户名设置为_ea.GetEvent<LoginEvent>().Publish(new LoginInfo(ctxUser.Username, ctx.UserRole.Where(r => r.UserId == ctxUser.Id).Select(r => r.Role.Name).ToList()));
  4. 以上所有内容都按照确切的顺序执行。

    我的问题是,如何订阅已发布的活动?:

    • 这已在MainWindowViewModel MainWindowView
    • 中执行
    • 这是在模块_ea.GetEvent<MessageEvent>().Publish("Username");的ViewModel中执行的,但它不起作用。

1 个答案:

答案 0 :(得分:1)

  

我的问题是,如何订阅已发布的活动?

你不能。好吧,你确实可以订阅这个活动,但如果你明白我的意思,你就不会获得任何已发布的活动。

因此,如果您希望确保不遗漏任何事件,则需要确保在之前订阅事件任何其他组件发布事件。