你需要的是一个Messenger/Event Aggregator。事件聚合器是一个代理对象,您可以引用该代理对象并指定要接收的事件类型,而无需参考甚至不需要知道生成事件的对象。
棱镜的EventAggregator是最常见的一个。请参阅:Event Aggregator
所以:
视图模型1:
public ViewModel1(IEventAggregator eventAggregator)
{
_eventAggregator=eventAggregator;
}
private void SendMessage()
{
_eventAggregator.GetEvent<UserLogin>().Publish(new UserLogin(_userName,_password);
}
视图模型2:
public ViewModel2(IEventAggregator eventAggregator)
{
_eventAggregator=eventAggregator;
_eventAggregator.GetEvent<UserLogin>().Subscribe(UserLoginReceived,ThreadOption.BackgroundThread,true);
}
private void UserLoginReceived(UserLogin login)
{
//do what you like here
}
发生了什么事是,eventaggregator传递给双方的ViewModels。 ViewModel1发布消息,但不知道谁(如果有的话)正在收听。 ViewModel2订阅了该事件并正在侦听发布者向其发送消息。
使用这种方法,您可以让您的视图模型进行通信,而无需互相参考。