下面是当前页面的ViewModel,我想把车牌号通过Messager传递到新打开的页面的ViewModel
private void GoScaLic()
{
//导航到扫描驾驶证页面
var navigationService = ServiceLocator.Current.GetInstance<INavigationService>();
navigationService.NavigateTo("ScaLic");
//发送车牌号
Messenger.Default.Send<String>(TS_NO, "ToLic");
}
下面是新页面的ViewModel:
public ScaLicViewModel(INavigationService navigationService)
{
//接收ScaPermitViewModel传过来的车牌号
Messenger.Default.Register<String>(this, "ToLic", ReceiveTS_NO);
}
运行的时候我发现:在执行Messenger.Default.Send<String>(TS_NO, "ToLic")这行代码的时候新页面的ViewModel还没有加载,不知道是不是这个原因导致参数传不过去。小白求指教
你这是用的事件 一方还没监听事件 你就发布事件了 对方当然收不到 如果是在新窗口创建时传参 直接重载构造函数
虽然不做wpf。但是窗体传值的话,
基本 静态变量,有参构造,委托。都能实现
send之前必须先register,不register是接收不到的。
很明显就是你想的原因;
1、你需要在ViewModel实例化页面注册消息,然后接收到的值保存变量;然后等ViewModel实例化后直接把消息小蜜蜂论坛顶帖机接收的值传给ViewModel;
2、既然你的值是新的ViewModel创建之前就有,你完全可以把值保存在一个Common项目中,静态属性保存;然后等ViewModel实例化后,直接取值就行了;
接收你得在无参构造函数里写
收:
public StudentManagement_VM()
{
Messenger.Default.Register<cy_JsonDto<cy_UserDateDto>>(this, "MainToStudent", GetUserInfo);
}
发:
Student StudentView = new Student();
StudentView.Show();
Messenger.Default.Send<JsonDto<UserDateDto>>(UserInfos, "MainToStudent");