我一直在尝试掌握 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/