Layer Communication.Messenger
下面的文本在DevExpress的MVVM Best Practices Demo中有一個相關(guān)的例子。
Group:API代碼示例
Module:Messenger
Example:Messenger
23.1 Demo Center:啟動演示
實際應(yīng)用程序幾乎總是有多個視圖和視圖模型,而且除了極少數(shù)例外,您將需要一種方法使這些獨立的層相互通信并共享數(shù)據(jù)。要解決這個問題:請使用DevExpress MVVM Messenger。
這個消息機制的思想非常簡單:在Sender ViewModel中,調(diào)用Send方法并用消息的形式傳輸所需的數(shù)據(jù),在接收者ViewModel中,調(diào)用Register方法來捕獲所有消息。
C#:
//sender
public void SendCustomMessage() {
Messenger.Default.Send("A message");
}
//receiver
public void RegisterAsStringMessageRecepient() {
Messenger.Default.Register<string>(this, OnStringMessage);
}
void OnStringMessage(string message){
//custom action
}
VB.NET:
'sender
Public Sub SendCustomMessage()
Messenger.Default.Send("A message")
End Sub
'receiver
Public Sub RegisterAsStringMessageRecepient()
Messenger.Default.Register(Of String)(Me, AddressOf OnStringMessage)
End Sub
Private Sub OnStringMessage(ByVal message As String)
'custom action
End Sub
Register方法在ViewModels之間建立永久連接,這意味著一旦調(diào)用Register方法就不需要再次調(diào)用,所有發(fā)送的后續(xù)消息都將被自動接收,要中斷此連接,請使用Unregister方法。
C#:
Messenger.Default.Unregister<string>(this, OnStringMessage);
VB.NET:
Messenger.Default.Unregister(Of String)(Me, OnStringMessage)
如果有多個發(fā)送方傳輸相同類型的消息,則可以使用tokens標(biāo)記從不同發(fā)送方發(fā)送消息,tokens可以是任何類型的對象,下面的代碼使用簡單的字符串令牌。
C#
public void TransmitMessage1() {
Messenger.Default.Send<string>("This message is sent from Sender 1", "sender1");
}
public void TransmitMessage2() {
Messenger.Default.Send<string>("This message is sent from Sender 2", "sender2");
}
VB.NET:
Public Sub TransmitMessage1()
Messenger.Default.Send(Of String)("This message is sent from Sender 1", "sender1")
End Sub
Public Sub TransmitMessage2()
Messenger.Default.Send(Of String)("This message is sent from Sender 2", "sender2")
End Sub
Register和Unregister方法具有相應(yīng)的重載,允許您接收或阻止用特定令牌標(biāo)記的消息。
C#:
Messenger.Default.Register<string>(this, "sender1", OnStringMessage); Messenger.Default.Unregister<string>(this, "sender2", OnStringMessage);
VB.NET:
Messenger.Default.Register(Of String)(Me, "sender1", OnStringMessage) Messenger.Default.Unregister(Of String)(Me, "sender2", OnStringMessage)

 QQ交談
QQ交談 在線咨詢
在線咨詢 
                 
                
 渝公網(wǎng)安備
            50010702500608號
渝公網(wǎng)安備
            50010702500608號
             
            
 客服熱線
客服熱線