我在我的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)时,它没有收到。
任何人都有什么想法?
答案 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);
}