2017-10-10 16 views
0

私はMvvmCross 4.2.3を使用していますが、私は私がナビゲートするViewModelAのStartメソッドにナビゲートすることShowViewModelを呼び出すようにしようとしていますShowViewModelMvvmCross ShowViewModelからスタート()内

を呼び出すことが安全であるときについての問い合わせがありますViewModelBに、しかし、私は次の例外

Java.Lang.IllegalStateException: Recursive entry to executePendingTransactions 

を取得し、私は早すぎるViewA \ ViewModelAのライフサイクルでそれをやっていたと仮定しました。だから私はViewAのOnResumeにコールを入れました。 ViewAを表示するのに必要なトランザクションはこの時点でコミットされていると私は考えていました。

しかし、私はまだ同じエラーが発生します。

誰もがこの問題を抱えていますか?もしそうなら、私はどのようにそれを解決するのですか?アドバンス

答えて

0

おかげで、私はちょうどあなたが何を求めて解決しようとすると、ここでは特定されていません。

私は2つのシナリオがあると思います。

scenerio first。 ユーザーインタラクションをナビゲートする場合は、ボタンをタップすることができます。

このコードを表示すると、このコードをOnCreateまたはViewModelSetメソッドオーバーライドに配置できます。

var set = this.CreateBindingSet<MyView, MyViewModel>(); 
set.Bind(MyButton).For(zz => zz.BindClick()).To(vm => vm.MyCommand); 

あなたのビューモデル内には、これが必要です。

 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); 
} 
       }); 
    } 
関連する問題