【问题标题】:ShowViewModel does not work if called too early如果过早调用 ShowViewModel 将不起作用
【发布时间】:2016-09-15 12:37:46
【问题描述】:

MvvmCross 4.1.4 对于Window Universal App (UWP) 平台,如果我们在ViewModel 内过早调用ShowViewModel(如在ConstructorInitStart 事件中),那么它不会导航到另一个模型。

public class FirstViewModel : MvxViewModel
{
  public FirstViewModel()
  {
     ShowViewModel<SecondViewModel>();
  }
}

请注意,它适用于 iOSAndroid 平台。

【问题讨论】:

    标签: win-universal-app uwp mvvmcross


    【解决方案1】:

    这是MvvmCross的一个bug(据此https://github.com/MvvmCross/MvvmCross/issues/1223)。

    解决方案是从视图中的View_LoadedView_GotFocus 等事件触发导航:

      public sealed partial class FirstView : MvxWindowsPage
      {
                public FirstView()
                {            
                    this.InitializeComponent();
                    this.Loaded += FirstView_Loaded;
                }
    
                private void FirstView_Loaded(object sender, RoutedEventArgs e)
                {   
                    var viewModel = base.ViewModel as FirstViewModel
                    if (viewModel != null)
                    {
                        viewModel.Initialise();
                    }
                }
     }
    

    ViewModel 更新:

    public class FirstViewModel : MvxViewModel
    {
      public FirstViewModel()
      {
      }
    
      public void Initialise()
      {
         //Navigate here
         ShowViewModel<SecondViewModel>();
      }
    }
    

    【讨论】:

    • 这不是一个真正的错误。当前正在加载 ViewModel 时,您正试图离开 ViewModel。这不是做这些事情的好方法。您应该提示演示者去其他地方,而不是让中间人 ViewModel 在展示自己之前导航到其他地方。
    • 因为平台的行为不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 2012-07-08
    • 2011-03-22
    • 2012-10-31
    • 2015-12-04
    • 2013-05-28
    • 1970-01-01
    相关资源
    最近更新 更多