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

下面是当前页面的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");

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页

打赏

netyou

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者