【问题标题】:Using MVVM Foundation Messenger to Send Data使用 MVVM Foundation Messenger 发送数据
【发布时间】:2012-10-15 11:56:55
【问题描述】:

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

App.Messenger.NotifyColleagues("NameOfMessage");

在接收端,例如不同的视图模型:-

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# 编写的)

【问题讨论】:

    标签: wpf mvvm messenger


    【解决方案1】:

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

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

    【讨论】:

    • 效果很好!非常感谢,我已经为这个问题困惑了很长时间。
    猜你喜欢
    • 1970-01-01
    • 2019-10-03
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多