如何在Messenger.Default.Send中发送两个通用参数<param1,param2 =“”> </param1,>

时间:2013-08-27 14:05:24

标签: c# wpf generics mvvm messaging

我需要将一些数据从一个地方异步发送到另一个地方。 为此我使用了GalaSoft.MvvmLight.Messaging。

如果我有一个参数要发送,则没有问题。

的Fe。

//Sends 
public void SendDriverToClient(Driver driver)
{
   Messenger.Default.Send<Driver>(driver, MessengerTokensServer.ReceiveDriver);
}

//Register
Messenger.Default.Register<Driver>(this, MessengerTokensServer.ReceiveDriver, ReceiveDriver);

//Receive
private void ReceiveDriver(Driver driver)
{
   //Instructions
}

问题在于我有多个参数要发送。

的Fe。

public void SendLinesUpdatedInTOToClient(int toTempId, TransportOrder to)
{
        Messenger.Default.Send<int, TransportOrder>(*Here I should have to place toTempId & to*, MessengerTokensServer.GetUpdatedTransportOrder);
}

我已经有了自己的解决方案,但可能不是正确的方法。目前的代码是这样的:

class ObjectHolder    
{
    public TransportOrder UpdatedTransportOrder { get; set; }
    public int TempId { get; set; }
} 

public void SendLinesUpdatedInTOToClient(int toTempId, TransportOrder to)
{
    Messenger.Default.Send<ObjectHolder>(new ObjectHolder{UpdatedTransportOrder = to, TempId = toTempId}, MessengerTokensServer.GetUpdatedTransportOrder);
}

谢谢!

1 个答案:

答案 0 :(得分:2)

请查看MSDN上的Tuple Class页面。 Tuple是数据的通用持有者......您可以像这样使用它:

Tuple<int, TransportOrder> data = new Tuple<int, TransportOrder>(toTempId, to);

它们是非常有用的“容器”,最多可以输入8个输入参数。

然后您可以访问另一端的值,如下所示:

int toTempId = data.Item1;
TransportOrder to = data.Item2;