首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EventAggregation快速启动?

EventAggregation快速启动?
EN

Stack Overflow用户
提问于 2011-04-03 23:16:51
回答 1查看 328关注 0票数 0

我被创建了一个MainView,它的DataContext是在xaml中初始化的MainViewModel。

MainView包含绑定到MainViewModel内容属性的ContentControl。

我在MainViewModel构造函数中添加了一些内容,这样如果当前用户没有登录,它就会自动地将LoginView (以及相应的DataContext LoginViewModel)加载到该内容属性中。

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

代码语言:javascript
复制
'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

这是怎么做的?

注意:我更喜欢使用棱镜的EventAggregator稀释片,而不是其他东西,但我不知道:

  1. 如何在ViewModels之间传播
  2. 如何创建事件(我不需要传递参数,也不需要它是泛型的,只有ActionLoginAction -没有参数。
  3. 我如何从MainViewMode订阅。
  4. 我不使用MEF或Unity,也不使用分离的模块,我的所有应用程序都在一个程序集中。
  5. 我根本不想在代码背后写任何代码。
  6. VB.NET或C#中的答案都是相同的。

任何帮助都会被推荐。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-07 10:13:06

您可以向这里查询有关EventAggregator的信息。

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

代码语言:javascript
复制
internal static class EventAggregatorHelper
{
  private static IEventAggregator _Current = new EventAggregator();
  public static IEventAggregator Current
  {
    get
    {
      return _Current;
    }
  }
}

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

代码语言:javascript
复制
EventAggregatorHelper.Current.GetEvent<SelectedItemChangedEvent>().
  Subscribe(HandleSelectedItemChangedEvent);

在本例中,SelectedItemChangedEvent和处理此事件的订阅服务器。

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

代码语言:javascript
复制
public class SelectedItemChangedEvent : CompositePresentationEvent<String>
{
} 

订阅者应该是这样的:

代码语言:javascript
复制
internal void HandleSelectedItemChangedEvent(string viewName)
{
   if (!String.IsNullOrEmpty(viewName))
   {
      //Do whatever you need to do here.
   }
}

我在开始时发布的事件聚合器的链接应该会为您清除大部分内容。

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5533172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档