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