EventAggregation快速入门?

我创建了一个MainView,它的DataContext是在xaml中初始化的MainViewModel。 MainView包含一个ContentControl,它绑定到MainViewModel的Content属性。 我在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
rathen然后其他东西,但我不知道: 如何在ViewModels之间传播它 如何创建事件(我不需要传递参数,也不需要它是通用的,只是
Action
LoginAction
- 没有参数。 我如何从MainViewMode订阅。 我不使用MEF或Unity,也不使用分离的模块,我的所有应用程序都在一个单独的程序集中。 我不想在代码隐藏中编写任何代码 VB.NET或C#中的答案都是相同的 建议任何帮助     
已邀请:
您可以到这里获取有关
EventAggregator
的信息。 您还可以使用以下代码在不使用MEF或Unity的情况下创建
EventAggregator
的实例:
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.
   }
}
我在开始时发布的事件聚合器的链接应该为您清除大部分内容。 希望这可以帮助。     

要回复问题请先登录注册