wpf - 使用 MVVM Foundation Messenger 发送数据

标签 wpf mvvm messenger

我一直在尝试掌握 MVVM,现在正处于尝试使用 Messenger 的阶段。我选择的框架是 Josh Smith 的 MVVM Foundation ,主要是因为它很小,而且我对 C# 和 MVVM 模式都很陌生。到目前为止,在不同的 ViewModel 中实现触发方法的消息进展顺利(我认为),例如发送由“NameOfMessage”标识的消息:-

App.Messenger.NotifyColleagues("NameOfMessage");

在接收端,例如不同的 View 模型:-
App.Messenger.Register("NameOfMessage", DoSomething);

Void DoSomething()
{
// Your code that "does something" here.
}

这一切都很好,而且效果很好;但是,最好将一些信息与消息一起传递。目前,这就像给每个人寄明信片,却忘记写下你的假期有多棒。

为此,我尝试了以下方法,该属性在设置后会在标题“SentMessage”下发送一条消息,其中包含属性 SentMessage aka 的内容,即“_sentMessage”:-
 public string SentMessage
    {
        get { return _sentMessage; }
        set
        {
            _sentMessage = value;
            RaisePropertyChanged("SentMessage");
            App.Messenger.NotifyColleagues("SentMessage", _sentMessage);
        }
    }

这表示没有错误并且似乎很好,我的问题是订阅此消息的语法:-
App.Messenger.Register("SentMessage", param => { this.ReceivedMessage = (string)param; });

我想接收消息并将字符串放在另一个属性中,例如收到消息。我尝试过的是上面的(受 Josh's Mediator Prototype 的影响),但这会引发一个错误,指出“Delegate 'System.Action' 不接受 1 个参数。我猜这是因为它期望指向一个方法?

如果有人可以帮助使用正确的语法,我们将不胜感激。 (这都是使用 WPF、.NET Framework 4 和 Visual Studio 2010 用 C# 编写的)

最佳答案

在我转向 MVVMLight 之前,我已经使用了 MVVM Foundation 一段时间。我认为您必须使用以下语法来注册消息的回调方法。 (我没有测试过,只是从我的内存中记忆过去。)

App.Messenger.Register("SentMessage", (Action<String>)(param => { this.ReceivedMessage = (string)param; }));

关于wpf - 使用 MVVM Foundation Messenger 发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12895172/

相关文章:

c# - 使用 MVVM 模式设计需要 BackgroundAgent 的应用程序的最佳实践

wpf - 在 ViewModel 中使用内置 WPF 命令

c# - 如何处理 facebook Messenger 用户位置? C# 机器人框架

node.js - Facebook 信使 :How to show a greeting message when start conversation

c# - ReactiveUI 6 异步命令未在 WPF 应用程序的后台线程上运行

c# - WPF - 呈现 "Real Time"最佳实践

c# - 使用 mvvm 在 xamarin 上绑定(bind)数据收集

wpf - 在 WPF 中创建自定义设计时集合编辑器

c# - ListView 数据不会在 WPF 应用程序中刷新

java - 如何让两台计算机用java相互通信以进行即时通讯?