【问题标题】:MVVM light sending message from ViewModel to ViewMVVM 光从 ViewModel 发送消息到 View
【发布时间】:2013-04-16 09:47:12
【问题描述】:

我对 MVVM light 非常陌生,并且在使用 Messenger 时遇到了一些问题..

我正在尝试从 ViewModel 向 View 发送消息,但这对我不起作用,我已经尝试浏览帖子和示例代码,但我认为我缺少一些非常简单的东西.. 感谢您的帮助..

在我的 ViewModel 中我发送一条消息

Messenger.Default.Send(new ClearNewProjectSettingsMessage());

这是我的 Message 类,我真的不知道该放什么,因为一切都在我的 View 类中

public class ClearNewProjectSettingsMessage
{
    public ClearNewProjectSettingsMessage()
    {

    }
}

我在 Views 构造函数中注册了消息:

Messenger.Default.Register<ClearNewProjectSettingsMessage>(
            this,
            () => ClearSettings()
);

不幸的是,这无法编译,所以我尝试了这个:

Messenger.Default.Register<ClearNewProjectSettingsMessage>(this,ClearSettings);  

但是还是不行..

这是我要调用的方法(在视图中):

private void ClearSettings()
{
        passwordBox.Clear();
} 

谢谢。

【问题讨论】:

    标签: c# mvvm messenger


    【解决方案1】:

    现在我从未使用过 MVVM Light Messenger,但与任何事件聚合器/消息总线一样,处理程序方法将 它处理的对象 作为参数接收是有意义的:

    我查看了源代码,注册如下:

    public virtual void Register<TMessage>(object recipient, Action<TMessage> action)
    

    考虑到这一点,这个定义:

    private void HandleClearSettings(ClearNewProjectSettingsMessage message)
    {
    }
    

    应该修复您的注册:

    Messenger.Default.Register<ClearNewProjectSettingsMessage>(this, HandleClearSettings);  
    

    【讨论】:

    • 感谢您的回复!我没有意识到处理程序方法接受它作为参数处理的对象。我使用以下方法注册了消息: Messenger.Default.Send(new ClearNewQCProjectSettingsMessage());那样可以么?我真的不明白你是如何注册你的消息的,因为你没有任何指向'ClearNewProjectSettingsMessage'的东西,我需要进一步调查,你能指出我的任何资源吗?谢谢!
    • @Manal Here's an article I found on Googlehere is the source code,您可以随时查看。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    相关资源
    最近更新 更多