2017-10-10 65 views
0

我使用MvvmCross 4.2.3和我有一个关于何时可以安全调用ShowViewModelMvvmCross ShowViewModel从内部开始()

我想打电话给ShowViewModel在ViewModelA的Start方法来导航导航查询到ViewModelB,但是我得到下面的异常

Java.Lang.IllegalStateException: Recursive entry to executePendingTransactions 

我以为我是在ViewA \ ViewModelA的生命周期太早做这件事。所以我把这个电话放到了ViewA的OnResume中。我此时假设任何显示ViewA所需的交易都将被提交。

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

有没有人来过这个问题。如果是这样,我该如何解决它。

在此先感谢

回答

0

我不是在这里具体,只是试图解决你问。

我认为可能有两种情况。

scenerio第一。 您想要在用户交互上导航,可以说按一下按钮。

内部视图中可以将此代码放入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); 
} 
       }); 
    }