Navigation MvvmCross:代码中的ViewModel导航

Navigation MvvmCross:代码中的ViewModel导航,navigation,viewmodel,mvvmcross,Navigation,Viewmodel,Mvvmcross,我有3个模型。第一视图模型、第二视图模型和第三视图模型 我想单击FirstViewModel中的一个按钮,然后它将打开SecondViewModel。打开SecondViewModel后,在没有任何用户交互的情况下,将通过代码打开第三个ViewModel 我无法让第三个模型自动打开 using Cirrious.MvvmCross.ViewModels; namespace PortableClassLibrary1.ViewModels {

我有3个模型。第一视图模型、第二视图模型和第三视图模型

我想单击FirstViewModel中的一个按钮,然后它将打开SecondViewModel。打开SecondViewModel后,在没有任何用户交互的情况下,将通过代码打开第三个ViewModel

我无法让第三个模型自动打开

        using Cirrious.MvvmCross.ViewModels;

        namespace PortableClassLibrary1.ViewModels
        {
            public class FirstViewModel 
                : MvxViewModel
            {
                private string _hello = "Hello MvvmCross 1";
                public string Hello
                { 
                    get { return _hello; }
                    set { _hello = value; RaisePropertyChanged(() => Hello); }
                }

                private MvxCommand _goSecondCommand;
                public System.Windows.Input.ICommand GoSecondCommand
                {
                    get
                    {
                        _goSecondCommand = _goSecondCommand ?? new Cirrious.MvvmCross.ViewModels.MvxCommand(DoGoSecond);
                        return _goSecondCommand;
                    }
                }

                private void DoGoSecond()
                {
                    ShowViewModel<SecondViewModel>();
                }
            }
        }


        using Cirrious.MvvmCross.ViewModels;

        namespace PortableClassLibrary1.ViewModels
        {
            public class SecondViewModel
                : MvxViewModel
            {
                private string _hello = "Hello MvvmCross 2";
                public string Hello
                {
                    get { return _hello; }
                    set { _hello = value; RaisePropertyChanged(() => Hello); }
                }

                private MvxCommand _goThirdCommand;
                public System.Windows.Input.ICommand GoThirdCommand
                {
                    get
                    {
                        _goThirdCommand = _goThirdCommand ?? new Cirrious.MvvmCross.ViewModels.MvxCommand(DoGoThird);
                        return _goThirdCommand;
                    }
                }

                private void DoGoThird()
                {
                    ShowViewModel<ThirdViewModel>();
                }

                public override void Start()
                {
                    base.Start();

                    DoGoThird();
                }
            }
        }



        using Cirrious.MvvmCross.ViewModels;

        namespace PortableClassLibrary1.ViewModels
        {
            public class ThirdViewModel
                : MvxViewModel
            {
                private string _hello = "Hello MvvmCross 3";
                public string Hello
                {
                    get { return _hello; }
                    set { _hello = value; RaisePropertyChanged(() => Hello); }
                }
            }
        }
使用cirries.MvvmCross.ViewModels;
命名空间PortableClassLibrary1.ViewModels
{
公共类第一视图模型
:MvxViewModel
{
私有字符串_hello=“hello MvvmCross 1”;
公共字符串你好
{ 
获取{return\u hello;}
设置{u hello=value;RaisePropertyChanged(()=>hello);}
}
私有MVX命令_goSecondCommand;
public System.Windows.Input.ICommand和GoSecondCommand
{
收到
{
_goSecondCommand=\u goSecondCommand??新建cirrial.MvvmCross.ViewModels.MvxCommand(DoGoSecond);
返回_goSecondCommand;
}
}
私有void DoGoSecond()
{
ShowViewModel();
}
}
}
使用cirries.MvvmCross.ViewModels;
命名空间PortableClassLibrary1.ViewModels
{
公共类第二视图模型
:MvxViewModel
{
私有字符串_hello=“hello MvvmCross 2”;
公共字符串你好
{
获取{return\u hello;}
设置{u hello=value;RaisePropertyChanged(()=>hello);}
}
私有MvxCommand_goThirdCommand;
public System.Windows.Input.ICommand和GoThirdCommand
{
收到
{
_goThirdCommand=\u goThirdCommand??新Cirrial.MvvmCross.ViewModels.MvxCommand(DoGoThird);
返回_goThirdCommand;
}
}
私人无效多哥鸟()
{
ShowViewModel();
}
公共覆盖无效开始()
{
base.Start();
多哥鸟();
}
}
}
使用cirries.MvvmCross.ViewModels;
命名空间PortableClassLibrary1.ViewModels
{
公共类第三种模型
:MvxViewModel
{
私有字符串_hello=“hello MvvmCross 3”;
公共字符串你好
{
获取{return\u hello;}
设置{u hello=value;RaisePropertyChanged(()=>hello);}
}
}
}

创建一个公共void Start()方法,而不是在构造函数中调用DoGoThird()。MvvmCross将在视图模型初始化后调用此方法。嗨,Kiliman,感谢您的回复。我已经更新了我的代码,但它仍然不起作用。屏幕卡在SecondViewModel上。是否有任何错误?我刚刚在TipCalc MVVMCross示例中尝试了您的代码,虽然我确实在Android布局上遇到了一些问题,但ViewModels的加载顺序与您期望的顺序相同,您无法在所有平台上轻松地进行这样的导航-例如在navigationcontroller中的IOS上,您必须等待一个导航结束,然后才能开始新的导航。WindowsPhone上也是如此。如果你想实现这个效果,你可以使用一个自定义的演示者——只需要在每个平台上都这样做——如果你这样做了,那么你发布的vm代码对我来说就很好了。或者,您需要一些计时器或动画完成触发器来启动辅助导航。谢谢Stuart。我会试试你的方法。谢谢你的建议。