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

下面是当前页面的ViewModel,我想把车牌号通过Messager传递到新打开的页面的ViewModel

private void GoScaLic()
        {
            //导航到扫描驾驶证页面
            var navigationService = ServiceLocator.Current.GetInstance();
            navigationService.NavigateTo("ScaLic");

            //发送车牌号
            Messenger.Default.Send(TS_NO, "ToLic");
        }

下面是新页面的ViewModel:

public ScaLicViewModel(INavigationService navigationService)
        {
            //接收ScaPermitViewModel传过来的车牌号
            Messenger.Default.Register(this, "ToLic", ReceiveTS_NO);
        }

运行的时候我发现:在执行Messenger.Default.Send(TS_NO, "ToLic")这行代码的时候新页面的ViewModel还没有加载,不知道是不是这个原因导致参数传不过去。小白求指教

你这是用的事件  一方还没监听事件   你就发布事件了 对方当然收不到   如果是在新窗口创建时传参 直接重载构造函数

虽然不做wpf。但是窗体传值的话,
基本  静态变量,有参构造,委托。都能实现

send之前必须先register,不register是接收不到的。

很明显就是你想的原因;


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

2、既然你的值是新的ViewModel创建之前就有,你完全可以把值保存在一个Common项目中,静态属性保存;然后等ViewModel实例化后,直接取值就行了;

接收你得在无参构造函数里写
收:
        public StudentManagement_VM()
        {
            Messenger.Default.Register>(this, "MainToStudent", GetUserInfo);
        }
发:
            Student StudentView = new Student();
            StudentView.Show();
            Messenger.Default.Send>(UserInfos, "MainToStudent");

你可能感兴趣的:(WPF+MVVMLight怎么传递参数给新打开的窗口)