MVVM Light messenger 只有在我手动实例化 viewmodel 时才有效

MVVM Light messenger only works if I manually instantiate viewmodel

我确定我只遗漏了一些微小的细节。使用 MVVM light,我只是想将一个简单的消息从一个视图发送到另一个视图(实际上是另一个视图模型)。它仅在我首先 实例化 接收视图模型时有效,否则它不会。

1- 我创建了一个空白的 WPF 应用程序并使用 nuget 添加了 MVVM light,它像往常一样添加了自己的代码位。

2-我添加的都在下面

在 MainWindow.xaml 的代码后面(忽略我现在没有在这里使用中继命令,我只需要 Messenger 工作)

private void Button_Click(object sender, RoutedEventArgs e)
        {
            //If I don't put the line below to create a new model, the  
            //message box in the next code piece isn't shown at all
            ReceiverViewModel rec=new ReceiverViewModel();
            Messenger.Default.Send("Hello, can you see me?");
        }

这是接收视图模型

public ReceiverViewModel()
        {
            Messenger.Default.Register<String>(this, x =>
            {
                MessageBox.Show(x);
            });
        }

这是自动生成的 ViewModel 定位器(我自己添加了接收器视图模型)

 public class ViewModelLocator
    {
        public ViewModelLocator()
        {
            ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
            SimpleIoc.Default.Register<MainViewModel>();
            SimpleIoc.Default.Register<ReceiverViewModel>();
        }

        public MainViewModel Main
        {
            get
            {
                return ServiceLocator.Current.GetInstance<MainViewModel>();
            }
        }

        public static void Cleanup()
        {
            // TODO Clear the ViewModels
        }
    }

我需要在哪里初始化 receiving viewmodel 以便删除上面的行?

谢谢

ViewModel 必须存在才能监听消息 在注册时实例化视图模型:

SimpleIoc.Default.Register<MainViewModel>(true);