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);
我确定我只遗漏了一些微小的细节。使用 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);