MVVM Light Messaging问题

时间:2014-10-01 12:00:13

标签: c# wpf mvvm-light

我在我的WPF应用程序中使用MVVM Light Messenger,并且某些内容无法正常工作。

我的视图模型使用令牌注册。我使用'long'对象作为标记。 我的代码例如使用令牌5注册,然后向服务发送请求。 当服务在我的第二个视图模型中回复它时,它将使用相同的标记发送消息。

当我调试并打印注册和发送消息时,似乎没问题,但由于某种原因,所有信使都没有被注册。

我的注册和处理如下:

private void registerTest()
{
    long tokenId = getNextToken();
    ExtraData data = new ExtraData();
    Messenger.Default.Register<MyMsg>(this, tokenId, (m) => recieve(m,data));
}

private void receive(MyMsg m,ExtraData data)
{
    Messenger.Default.Unregister<MyMsg>(this, m.tokenId);
}

我的发送内容如下:

private void sendTest(long tokenId)
{
    Messenger.Default.Send(new MyMsg(tokenId), tokenId);
}

我总是在我的sendTest收到之前注册令牌X, 但出于某种原因,有时当调用sendTest(X)时,它没有收到。

任何人都有什么想法?

1 个答案:

答案 0 :(得分:0)

您应该在邮件中将ExtraData作为类属性,以便能够从不同来源与其进行互动。

public class MyMsg {
    public int TokenId {get;set;}
    public ExtraData Data {get;set;}
}


public void registerTest()
{
    Messenger.Default.Register<MyMsg>(this, recieve);
}

public void recieve(MyMsg myMsg)
{
    Messenger.Default.Unregister<MyMsg>(this, myMsg.TokenId);
    //Note that you can also access m.Data here if you need to
}


public void sendTest()
{
    var myMsg = new MyMsg {TokenId = GetNextToken(), Data = new ExtraData()};
    Messenger.Default.Send(myMsg);
}