我正在开展涉及MvvmCross的一些项目。对于iOS,我使用继承自MvxTouchViewPresenter的自定义演示者。
public override void Show(IMvxTouchView view)
{
var viewController = view as UIViewController;
if (viewController == null)
throw new MvxException("Passed in IMvxTouchView is not a UIViewController");
if (_masterNavigationController == null)
ShowFirstView(viewController);
else
_masterNavigationController.PushViewController(viewController, true /*animated*/);
var myviewmodel = view.ViewModel;
//Do some staff for myviewmodel
}
我的问题是,在大多数情况下,myviewmodel此时为空。它被创建但稍后在...加载viewController时。这看起来像是一个计时问题...有趣的是,这段代码在我以前的MvvmCross项目中运行得很好。
我也尝试过使用:
var myviewmodel = view.ReflectionGetViewModel ();
不幸的是结果是一样的:( 任何人都知道如何解决或解决这个问题?
答案 0 :(得分:1)
MvvmCross在base.ViewDidLoad()
中创建ViewModel作为ViewController
的一部分 - 所以如果ViewDidLoad
未被调用,那么它还不会成为ViewModel
。
基于此:
您可以尝试触发要加载的View
- 这会导致ViewDidLoad
触发吗? (最简单的方法是尝试引用View
)。
或者您可以欺骗MvvmCross尽早加载ViewModel
- 为此,请从https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross.Touch/Views/MvxViewControllerExtensionMethods.cs#L18