Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVVM灯光混乱问题_C#_Wpf_Mvvm Light - Fatal编程技术网

C# MVVM灯光混乱问题

C# MVVM灯光混乱问题,c#,wpf,mvvm-light,C#,Wpf,Mvvm Light,我在我的WPF应用程序中使用MVVM Light Messenger,但有些东西没有按预期工作 我的视图模型注册了一个令牌。我使用“长”对象作为标记。 例如,我的代码使用令牌5注册,然后向服务发送请求。 当服务回复时,它在我的第二个视图模型中处理,然后该视图模型将使用相同的令牌发送消息 当我调试并打印消息的注册和发送时,它看起来是正常的,但是由于某些原因,并不是所有的messenger都被注册者接收到 我的注册和处理如下: private void registerTest() { lo

我在我的WPF应用程序中使用MVVM Light Messenger,但有些东西没有按预期工作

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

当我调试并打印消息的注册和发送时,它看起来是正常的,但是由于某些原因,并不是所有的messenger都被注册者接收到

我的注册和处理如下:

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)时,它不会被接收


有人知道发生了什么吗?

您应该将您的
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);
}
公共类MyMsg{
公共int标记ID{get;set;}
公共外部数据数据{get;set;}
}
公共无效注册表测试()
{
Messenger.Default.Register(此,Receive);
}
公共无效接收(MyMsg MyMsg)
{
Messenger.Default.Unregister(这是myMsg.TokenId);
//请注意,如果需要,您也可以在此处访问m.数据
}
公共测试()
{
var myMsg=new myMsg{TokenId=GetNextToken(),Data=new ExtraData()};
Messenger.Default.Send(myMsg);
}

你们班的其他同学长什么样?您是如何注入messenger的?问题似乎出现在操作中的lambda中,如果不在lambda中使用局部变量,这将起作用。我在这里找到了一个相关的例子哦!我想我明白你在说什么了…我只是做了一个大的编辑,因为在堆栈编辑器中编写代码有一些不好的地方。