我开始使用iOS中的MvvmCross。
public class MainView : MvxTabBarViewController
{
public override void ViewDidLoad()
{
base.ViewDidLoad();
var vm = (MainViewModel)this.ViewModel;
if (vm == null)
return;
}
}
设置断点到访问ViewModel
的行,显示ViewModel
为空。
我可以通过在构造函数中调用ViewDidLoad()
来解决此问题。然后,ViewModel
在构造函数调用期间为空,但在默认的ViewDidLoad
调用中有效。但这看起来像是一种解决方法。有人可以帮忙吗?
答案 0 :(得分:6)
我猜这里的问题将特定于TabBarViewController
的构建方式。
ViewDidLoad
是一个虚方法,它是第一次访问View时调用的。
在TabBarViewController
的情况下,这种情况发生在iOS基本视图构造函数中 - 即它出现之前类本身已经调用了它的构造函数。
我发现的唯一方法是在ViewDidLoad
中添加针对情况的检查,并在类构造函数中再次调用ViewDidLoad
。
类似的东西:
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;
}
}