1

我一直在尝试掌握 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# 编写的)

4

1 回答 1

1

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

App.Messenger.Register("SentMessage", (Action<String>)(param => { this.ReceivedMessage = (string)param; }));
于 2012-10-16T02:20:19.743 回答