来自Start()内的MvvmCross ShowViewModel

时间:2017-10-10 13:40:39

标签: android exception xamarin mvvmcross

我正在使用MvvmCross 4.2.3,我有一个关于何时可以安全地调用ShowViewModel的查询

我试图调用ShowViewModel在ViewModelA的Start方法中导航以导航到ViewModelB,但是我得到以下异常

Java.Lang.IllegalStateException: Recursive entry to executePendingTransactions

我认为我在ViewA \ ViewModelA的生命周期中做得太早。所以我将调用放入ViewA的OnResume中。我假设此时显示ViewA所需的任何交易都已被提交。

但我仍然得到同样的错误。

有没有人遇到过这个问题。如果是这样,我该如何解决呢。

先谢谢

1 个答案:

答案 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);
}
                });
    }