2012-11-19 89 views
1

我正在使用MVVM模式構建WPF應用程序原型。申請應有兩個窗口:MainWindowLoginWindow如何在兩種不同視圖模型中使用相同的模型數據?

Model包含兩個屬性:UsernamePassword

LoginWindow負責處理用戶輸入的用戶名和密碼,以便相應的視圖模型更新這些屬性。但MainWindow也需要訪問用戶名和密碼,以便以後用於客戶端對象。

我該如何處理?

將在LoginViewModel中創建的Model的實例傳遞給MainWindowViewModel的構造函數?

回答

1

你需要的是一個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訂閱了該事件並正在偵聽發佈者向其發送消息。

使用這種方法,您可以讓您的視圖模型進行通信,而無需互相參考。

相關問題