我被创建了一个MainView,它的DataContext是在xaml中初始化的MainViewModel。
MainView包含绑定到MainViewModel内容属性的ContentControl。
我在MainViewModel构造函数中添加了一些内容,这样如果当前用户没有登录,它就会自动地将LoginView (以及相应的DataContext LoginViewModel)加载到该内容属性中。
现在我的问题是,当用户成功登录时,我应该做什么:
'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稀释片,而不是其他东西,但我不知道:
Action、LoginAction -没有参数。任何帮助都会被推荐。
发布于 2011-04-07 10:13:06
您可以向这里查询有关EventAggregator的信息。
您还可以使用以下代码创建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);在本例中,SelectedItemChangedEvent和处理此事件的订阅服务器。
SelectedItemChangedEvent是一个声明的类,如下所示:
public class SelectedItemChangedEvent : CompositePresentationEvent<String>
{
} 订阅者应该是这样的:
internal void HandleSelectedItemChangedEvent(string viewName)
{
if (!String.IsNullOrEmpty(viewName))
{
//Do whatever you need to do here.
}
}我在开始时发布的事件聚合器的链接应该会为您清除大部分内容。
希望这能有所帮助。
https://stackoverflow.com/questions/5533172
复制相似问题