Silverlight 4.0 事件聚合快速启动?
我创建了一个MainView,它的DataContext是一个用xaml初始化的MainViewModel。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包含绑定到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.
}
}