你需要的是一個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訂閱了該事件並正在偵聽發佈者向其發送消息。
使用這種方法,您可以讓您的視圖模型進行通信,而無需互相參考。