我一直在尝试掌握 MVVM,现在正处于尝试使用 Messenger 的阶段。我选择的框架是 Josh Smith 的MVVM Foundation,主要是因为它很小,而且我对 C# 和 MVVM 模式都很陌生。到目前为止,在不同的 ViewModel 中实现触发方法的消息已经很顺利(我认为),例如发送由“NameOfMessage”标识的消息:-
App.Messenger.NotifyColleagues("NameOfMessage");
在接收端,例如不同的 ViewModel :-
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; });
我想接收消息并将字符串放在另一个属性中,例如 ReceivedMessage。我尝试过的是上面的(受Josh 的 Mediator Prototype影响),但这会引发一个错误,指出“Delegate 'System.Action' 不接受 1 个参数。我猜这是因为它期望指向一个方法?
如果有人可以帮助使用正确的语法,我们将不胜感激。(这都是使用 WPF、.NET Framework 4 和 Visual Studio 2010 用 C# 编写的)