C# 使用MVVM灯';s Messenger在视图模型之间传递值

C# 使用MVVM灯';s Messenger在视图模型之间传递值,c#,wpf,mvvm-light,C#,Wpf,Mvvm Light,有人能为我解释一下MVVM Light的Messenger吗?我在这里读一篇关于StackOverflow的帖子:试图得到这个。MVVM Light上的文档目前还不是很好,所以我完全不确定该去哪里 假设我有两个ViewModel和一个ViewModelLocator。我希望能够在这三个参数之间传递参数而不会出现问题。我该如何和信使一起做这件事?它能做到这一点吗 编辑:这是我的新实现。到目前为止,Messenger实例似乎没有调用令牌。我非常困惑 在第一个ViewModel中: Messenger

有人能为我解释一下MVVM Light的Messenger吗?我在这里读一篇关于StackOverflow的帖子:试图得到这个。MVVM Light上的文档目前还不是很好,所以我完全不确定该去哪里

假设我有两个ViewModel和一个ViewModelLocator。我希望能够在这三个参数之间传递参数而不会出现问题。我该如何和信使一起做这件事?它能做到这一点吗

编辑:这是我的新实现。到目前为止,Messenger实例似乎没有调用令牌。我非常困惑

在第一个ViewModel中:

MessengerInstance.Send<XDocument>(SelectedDocument);
MessengerInstance.Send(所选文档);
在第二种情况下:

MessengerInstance.Register<XDocument>(this, xdoc => CopySettings(xdoc));
MessengerInstance.Register(这个,xdoc=>CopySettings(xdoc));

可能是完全错误的。我还没有机会测试它,但当我这样做时,VisualStudio对我的愤怒就少了。此外,在发送消息之前,Messenger实例也会进行注册

假设我有两个ViewModel和一个ViewModelLocator。我希望能够在这三个参数之间传递参数而不会出现问题。我该如何和信使一起做这件事?它能做到这一点吗

这正是它的目的,是的

要发送消息,请执行以下操作:

MessengerInstance.Send(payload, token);
MessengerInstance.Register<PayloadType>(
    this, token, payload => SomeAction(payload));
要接收消息,请执行以下操作:

MessengerInstance.Send(payload, token);
MessengerInstance.Register<PayloadType>(
    this, token, payload => SomeAction(payload));
那么您的发送/接收将类似于:

// sending view model
MessengerInstance.Send(Brushes.Red, MessengerToken.BrushChanged);

// receiving view model

// put this line in the constructor
MessengerInstance.Register<Brush>(this, token, brush => ChangeColor(brush));

public void ChangeColor(Brush brush)
{
    Brush = brush;
}
//发送视图模型
Send(brusks.Red,MessengerToken.BrushChanged);
//接收视图模型
//把这一行放在构造函数中
Register(this,token,brush=>ChangeColor(brush));
公共空白更改颜色(画笔)
{
刷子=刷子;
}
以下devuxer评论的[编辑]URL更改为:

这太完美了!我试图搜索有关此的文档,但没有找到任何文档。你知道我可能丢失了什么文件吗?我几乎没有见过MVVM Light。开发MVVM Light的Laurent Bugnon倾向于使用他的博客介绍新功能或更新功能。这里有一个关于messenger的特别条目,你可能会发现它对你很有帮助:我一直在做手术,直到今天才有机会开始实施。我看不出Messenger实例在哪里调用令牌。我将把我的实现添加到主帖子中。我在这里还发布了另一个问题:“但是当我这样做的时候,VisualStudio对我的愤怒会减少。”。哈这让我咯咯笑了起来