2017-10-10 63 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); 
} 
       }); 
    }