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

时间:2015-04-06 10:09:00

标签: wpf mvvm-light

我确信我只缺少一些细微的细节。使用MVVM灯,我只是尝试将一个简单的消息从一个视图发送到另一个视图(实际上是另一个视图模型)。它只适用于我首先实例化接收视图模型,否则它不会'。

1-我创建了一个空白的WPF应用程序并使用nuget添加了MVVM灯,并且它通常会添加自己的代码位。

2-我添加的所有内容都在

之下

在MainWindow.xaml的代码后面(忽略我现在不使用relay命令,我只需要使用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,以便我可以删除上面的行?

由于

1 个答案:

答案 0 :(得分:2)

ViewModel必须存在才能侦听消息 要在注册时实例化viewmodel:

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