Silverlight 4.0 事件聚合快速启动?

Silverlight 4.0 事件聚合快速启动?,silverlight-4.0,mvvm,navigation,prism,eventaggregator,Silverlight 4.0,Mvvm,Navigation,Prism,Eventaggregator,我创建了一个MainView,它的DataContext是一个用xaml初始化的MainViewModel。 MainView包含绑定到MainViewModel的Content属性的ContentControl。 我在MainViewModel构造函数中添加了一些内容,因此如果当前用户未登录,它会自动将LoginView(以及相应的DataContext LoginView模型)加载到此内容属性中 现在我的问题是,当用户成功登录时,我应该做什么: 'To be called from the

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

现在我的问题是,当用户成功登录时,我应该做什么:

'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的
事件聚合器,而不是其他东西,但我不知道:

  • 如何在ViewModels之间展开它
  • 如何创建事件(我不需要传递参数,也不需要它是通用的,只需
    操作
    登录操作
    ——无参数
  • 如何从MainViewMode订阅
  • 我不使用MEF或Unity,也不使用单独的模块,我的所有应用程序都在一个组件中
  • 我不喜欢在代码背后写任何代码
  • VB.NET或C#中的答案是相同的
  • 建议您提供任何帮助

    您可以查询有关
    事件聚合器的信息

    您还可以使用以下代码创建
    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);
    
    用户应该是这样的:

    internal void HandleSelectedItemChangedEvent(string viewName)
    {
       if (!String.IsNullOrEmpty(viewName))
       {
          //Do whatever you need to do here.
       }
    }
    
    我在开始时发布的事件聚合器的链接应该可以为您清除大部分内容


    希望这有帮助。

    感谢您指出,
    EventAggregator
    不依赖于MEF或Unity,我认为它是由外部引擎维护的。没问题。我希望它能帮助您。请参阅相关问题,您可能会添加一些重要信息。
    internal void HandleSelectedItemChangedEvent(string viewName)
    {
       if (!String.IsNullOrEmpty(viewName))
       {
          //Do whatever you need to do here.
       }
    }