View未在MVVMCross中使用默认VML查找Viewmodel

时间:2014-11-17 11:29:13

标签: c# android mvvmcross

我正在尝试创建一个可移植类,以便我可以跨平台使用它。它在Windows Phone 8.1 App中运行良好。但是当涉及到Android时,它会在调试器中将Viewmodel显示为null并将DataContext显示为Null,这会破坏应用程序调试器。当我创建另一个viewmodel并查看测试应用程序时,它在android上工作正常。可能的原因是什么。

编辑:由于构造函数而崩溃,我在其中传递业务逻辑实例。所以,我认为构造函数是必要的,但在这种情况下它崩溃了。我没有尝试解析ViewModel,我正在尝试解决ViewModel中的Service实例,并且出于MVVM的目的,我将服务从Droid Project中保留下来所以base.OnCreate(捆绑)无论如何都不会进入场景。

public BookViewModel(ILogic _logic)        {

       logic = _logic;
       //var ss= Mvx.Resolve<ILogic>();
      //var  x = Mvx.CanResolve<ILogic>();
       _details = logic.Read();

   }

以下是逻辑代码:

 public class Logic : ILogic
{

    #region Attributes

    List<Detail.Detail> _details = new List<Detail.Detail>();
    DataLayer.DataLayer dl = new DataLayer.DataLayer();

    #endregion

    #region .ctor

    public Logic()
    {
        populateList();
    }

    #endregion

    #region Methods


   private void populateList()
    {
        _details = dl.Access();
    }

以下是ViewModel中的App.cs,CanResolve在其中提供 False

public class App:Cirrious.MvvmCross.ViewModels.MvxApplication     {

    #region Methods
    public override void Initialize()
    {
        Mvx.RegisterType<ILogic, Logic>();
        var ss = Mvx.CanResolve<ILogic>();

        RegisterAppStart<ViewModels.BookViewModel>();
    }

    #endregion
}

1 个答案:

答案 0 :(得分:0)

有几个与此类似的问题和答案 - 例如类似于MVVMCross ViewModel construction failure notifications

基本答案是MvvmCross在构造函数期间无法解析ViewModel - 您必须等到base.OnCreate(bundle)调用之后 - 此时ViewModel将被解析。

还有一些关于ViewModel位于Who should create view model instances in MvvmCrossCoreDispatcher.HasThreadAccess "breaking change"(以及可能还有其他一些地方)的更多信息