【问题标题】:MvvmCross ShowViewModel from within Start()MvvmCross ShowViewModel 来自 Start()
【发布时间】:2017-10-10 13:40:38
【问题描述】:

我正在使用 MvvmCross 4.2.3,我想了解何时可以安全调用 ShowViewModel

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

Java.Lang.IllegalStateException: Recursive entry to executePendingTransactions

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

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

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

提前致谢

【问题讨论】:

    标签: android exception xamarin mvvmcross


    【解决方案1】:

    我在这里不具体,只是想解决你问的问题。

    我认为可能有两种情况。

    场景优先。 你想在用户交互上导航,比如说点击一个按钮。

    在视图内部,您可以将此代码放在 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>();
                    });
                });
            }
        }
    

    场景二,

    根据要导航的完成情况,您正在执行一些异步任务。

    在您的视图模型构造函数中,您调用如下方法。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-04
      • 2014-05-13
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      相关资源
      最近更新 更多