【问题标题】:EventAggregation quick start?EventAggregation 快速入门?
【发布时间】:2011-04-03 23:16:51
【问题描述】:

我创建了一个 MainView,它的 DataContext 是在 xaml 中初始化的 MainViewModel。
MainView 包含一个绑定到 MainViewModel 的 Content 属性的 ContentControl。
我在 MainViewModel 构造函数中添加了一些内容,这样如果当前用户没有登录,它会自动将 LoginView(以及相应的 DataContext LoginViewModel)加载到这个 Content 属性中。

现在我的问题是,当用户成功登录后我该怎么办:

'To be called from the LoginCommand
Private Sub Login
  'Do Login
  If WebContext.Current.User.IsAuthenticated Then
    ' - Publish a global event to be subscribed and caught from the MainViewModel
    ' - Close LoginView
    ' - The MainViewModel should set it's Content property back
    ' to what the user initially intended to open
  End If
End Sub

这是怎么做到的?

注意:我更喜欢使用 prism 的 EventAggregator 而不是其他东西,但我不知道:

  1. 如何在 ViewModel 之间分散它
  2. 如何创建事件(我不需要传递参数,也不需要它是通用的,只需ActionLoginAction - 无参数。
  3. 如何从 MainViewMode 订阅。
  4. 我不使用 MEF 或 Unity,也不使用单独的模块,我的所有应用程序都在一个程序集中。
  5. 我不希望在代码隐藏中编写任何代码
  6. 欢迎在 VB.NET 或 C# 中使用相同的答案

任何帮助都会被推荐

【问题讨论】:

    标签: silverlight-4.0 mvvm navigation prism eventaggregator


    【解决方案1】:

    您可以前往here 获取有关EventAggregator 的信息。

    您还可以使用以下代码创建EventAggregator 的实例,而无需使用 MEF 或 Unity:

    internal static class EventAggregatorHelper
    {
      private static IEventAggregator _Current = new EventAggregator();
      public static IEventAggregator Current
      {
        get
        {
          return _Current;
        }
      }
    }
    

    然后您可以调用EventAggregator,将所需信息传递给聚合器:

    EventAggregatorHelper.Current.GetEvent<SelectedItemChangedEvent>().
      Subscribe(HandleSelectedItemChangedEvent);
    

    在这种情况下,SelectedItemChangedEvent 和处理此事件的订阅者。

    SelectedItemChangedEvent 是一个声明如下所示的类:

    public class SelectedItemChangedEvent : CompositePresentationEvent<String>
    {
    } 
    

    订阅者会是这样的:

    internal void HandleSelectedItemChangedEvent(string viewName)
    {
       if (!String.IsNullOrEmpty(viewName))
       {
          //Do whatever you need to do here.
       }
    }
    

    我在开头发布的事件聚合器的链接应该可以为您解决大部分问题。

    希望这会有所帮助。

    【讨论】:

    • 感谢您指出EventAggregator 不依赖于 MEF 或 Unity,我认为它是由外部引擎维护的。
    • 没问题。希望对您有所帮助。
    • 请参阅this相关问题,您可能会添加一些重要信息。
    猜你喜欢
    • 2014-11-12
    • 1970-01-01
    • 2019-03-09
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    相关资源
    最近更新 更多