【问题标题】:View is not locating the Viewmodel with default VML in MVVMCrossView 未在 MVVMCross 中使用默认 VML 定位 Viewmodel
【发布时间】:2014-11-17 11:29:13
【问题描述】:

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

EDIT :由于构造函数而崩溃,我在其中传递了业务逻辑实例。因此,我认为构造函数是必要的,但在这种情况下它会崩溃。我不是在尝试解析 ViewModel,而是在尝试解析 ViewModel 中的服务实例,并且为了 MVVM 的目的,我将服务排除在 Droid 项目之外所以 base.OnCreate(bundle) 无论如何都不会出现在场景中。

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

公共类 App : Cirrious.MvvmCross.ViewModels.MvxApplication {

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

        RegisterAppStart<ViewModels.BookViewModel>();
    }

    #endregion
}

【问题讨论】:

    标签: c# android mvvmcross


    【解决方案1】:

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

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

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

    【讨论】:

    • 实际上,我并没有解析视图模型。我正在解决我在 ViewModel 中使用的服务。我一直等到 base.OnCreate(bundle) 但它在那一点上中断了。在 LOCALE 中,它向我显示 DataContext 和 ViewModel 为 null 。我试图通过解决 OnStart() 内的服务实例来解决这个问题,但又中断了。
    • 请编辑问题以提供代码和关于失败原因的明确问题。您的问题 curly 说视图无法找到视图模型并且“由于构造函数而崩溃” - 如果这是不明确的,那么您可以使用编辑问题来改进它。
    • 我现在得到了错误。我试图在两个 ViewModel 中解析服务,但在这种情况下,我想知道在两个 VM 中使用相同服务实例的解决方案。
    猜你喜欢
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多