MVVM Light:从ViewModel发送消息到View

5

我很新于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();
} 

感谢您的选择。
1个回答

3

我从未使用过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'的东西,我需要进一步了解一下,你能指引我任何资源吗?谢谢! - MTA
1
@Manal 这是我在Google上找到的一篇文章,以及这是源代码,你可以随时查看,如果你有疑问的话。 :) - Patryk Ćwiek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接