我创建了一个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然后其他东西,但我不知道:
Action
,LoginAction
- 没有参数。建议任何帮助
答案 0 :(得分:1)
您可以here查看有关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.
}
}
我在开始时发布的事件聚合器的链接应该清除大部分内容。
希望这有帮助。