我正在使用MvvmCross 4.2.3,我有一个关于何时可以安全地调用ShowViewModel的查询
我试图调用ShowViewModel在ViewModelA的Start方法中导航以导航到ViewModelB,但是我得到以下异常
Java.Lang.IllegalStateException: Recursive entry to executePendingTransactions
我认为我在ViewA \ ViewModelA的生命周期中做得太早。所以我将调用放入ViewA的OnResume中。我假设此时显示ViewA所需的任何交易都已被提交。
但我仍然得到同样的错误。
有没有人遇到过这个问题。如果是这样,我该如何解决呢。
先谢谢
答案 0 :(得分:0)
我在这里并不具体,只是想解决你的问题。
我认为可能有两种情况。
首先是场景。 你想要在用户交互中导航,可以点击按钮。在内部视图中,您可以将此代码放在OnCreate或ViewModelSet方法覆盖中。
var set = this.CreateBindingSet<MyView, MyViewModel>();
set.Bind(MyButton).For(zz => zz.BindClick()).To(vm => vm.MyCommand);
在你的viewmodel中,你需要这个。
private ICommand myCommand;
public virtual ICommand MyCommand
{
get
{
return myCommand = myCommand ?? new MvxCommand(() => {
Task.Factory.StartNew(() => {
ShowViewModel<MyNextViewModel>();
});
});
}
}
情景2,
根据您要导航的完成情况,您正在进行一些异步任务。
在viewmodel构造函数中,您可以调用下面的方法。
Public MyViewModel(){
LoadActivation()
}
private async void LoadActivation()
{
await Task.Run(async () =>
{
try {
response = await _Myservice.LoadMyData();
if(response != null ) {
ShowViewModel<MyNextViewModel>():
}
}
catch (Exception ex) {
Debug.WriteLine(ex);
}
});
}