我确信我只缺少一些细微的细节。使用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
,以便我可以删除上面的行?
由于
答案 0 :(得分:2)
ViewModel必须存在才能侦听消息 要在注册时实例化viewmodel:
SimpleIoc.Default.Register<MainViewModel>(true);