彩票走势图

logo DevExpress WinForm中文手册

Layer Communication.Messenger


立即下载DevExpress WinForms

下面的文本在DevExpress的MVVM Best Practices Demo中有一个相关的例子。

Group:API代码示例

Module:Messenger

Example:Messenger

23.1 Demo Center启动演示

实际应用程序几乎总是有多个视图和视图模型,而且除了极少数例外,您将需要一种方法使这些独立的层相互通信并共享数据。要解决这个问题:请使用DevExpress MVVM Messenger。

这个消息机制的思想非常简单:在Sender ViewModel中,调用Send方法并用消息的形式传输所需的数据,在接收者ViewModel中,调用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之间建立永久连接,这意味着一旦调用Register方法就不需要再次调用,所有发送的后续消息都将被自动接收,要中断此连接,请使用Unregister方法。

C#:

Messenger.Default.Unregister<string>(this, OnStringMessage);

VB.NET:

Messenger.Default.Unregister(Of String)(Me, OnStringMessage)

如果有多个发送方传输相同类型的消息,则可以使用tokens标记从不同发送方发送消息,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方法具有相应的重载,允许您接收或阻止用特定令牌标记的消息。

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)
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP