WPF+MVVMLight怎么传递参数给新打开的窗口?

zy9209 2019-10-17 07:16:20
下面是当前页面的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还没有加载,不知道是不是这个原因导致参数传不过去。小白求指教
...全文
565 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_42536766 2020-01-20
  • 打赏
  • 举报
回复
接收你得在无参构造函数里写 收: 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");
E次奥 2019-10-18
  • 打赏
  • 举报
回复
很明显就是你想的原因;


1、你需要在ViewModel实例化页面注册消息,然后接收到的值保存变量;然后等ViewModel实例化后直接把消息接收的值传给ViewModel;

2、既然你的值是新的ViewModel创建之前就有,你完全可以把值保存在一个Common项目中,静态属性保存;然后等ViewModel实例化后,直接取值就行了;
exception92 2019-10-18
  • 打赏
  • 举报
回复
send之前必须先register,不register是接收不到的。
正怒月神 2019-10-18
  • 打赏
  • 举报
回复
虽然不做wpf。但是窗体传值的话, 基本 静态变量,有参构造,委托。都能实现
zy9209 2019-10-18
  • 打赏
  • 举报
回复
搞定了,谢谢大家!
OrdinaryCoder 2019-10-18
  • 打赏
  • 举报
回复
你这是用的事件 一方还没监听事件 你就发布事件了 对方当然收不到 如果是在新窗口创建时传参 直接重载构造函数

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧