ViewDidLoad期间ViewModel为null

我开始在iOS中使用MvvmCross。

public class MainView : MvxTabBarViewController { public override void ViewDidLoad() { base.ViewDidLoad(); var vm = (MainViewModel)this.ViewModel; if (vm == null) return; } } 

将断点设置为访问ViewModel的行,向我显示ViewModel为null。

我可以通过在构造函数中调用ViewDidLoad()来解决此问题。 然后, ViewModel在构造函数调用期间为null,但在默认的ViewDidLoad调用中有效。 但这看起来像是一种解决方法。 有人可以帮忙吗?

我猜这里的问题将特定于TabBarViewController的构造方式。

ViewDidLoad是一种虚方法,它是第一次访问View时调用的。

TabBarViewController的情况下,这发生在iOS基本View构造函数中 – 即它发生类本身已经调用其构造函数之前。

我发现的唯一方法是在ViewDidLoad添加一个针对情境的ViewDidLoad ,并在类构造函数中再次调用ViewDidLoad

您可以在行动中看到这一点N-25 – https://github.com/MvvmCross/NPlus1DaysOfMvvmCross/blob/976ede3aafd3a7c6e06717ee48a9a45f08eedcd0/N-25-Tabbed/Tabbed.Touch/Views/FirstView.cs#L17

就像是:

 public class MainView : MvxTabBarViewController { private bool _constructed; public MainView() { _constructed = true; // need this additional call to ViewDidLoad because UIkit creates the view before the C# hierarchy has been constructed ViewDidLoad(); } public override void ViewDidLoad() { if (!_constructed) return; base.ViewDidLoad(); var vm = (MainViewModel)this.ViewModel; if (vm == null) return; } }