MvvmCross并将视图模型注入到视图构造函数中

时间:2014-11-29 17:47:31

标签: c# windows-phone windows-phone-8.1 mvvmcross win-universal-app

在MvvmCross中是否可以将视图模型注入到视图的构造函数中?

我的视图的构造函数如下所示:

public HomeView(IHomeViewModel viewModel)
{
...
}

在Setup.cs类中,我使用以下方法手动将视图模型映射到视图:

protected override void InitializeViewLookup()
{
  IDictionary<Type, Type> lookups = new Dictionary<Type, Type>
  {
    {typeof(HomeViewModel), typeof(HomeView)}
  };

  IMvxViewsContainer container = Mvx.Resolve<IMvxViewsContainer>();
  container.AddAll(lookups);
}

Setup.Initialize方法中,我向IoC容器注册IHomeViewModel

Mvx.RegisterType<IHomeViewModel, HomeViewModel>();

当我运行应用程序时,视图似乎呈现,但没有任何控件可见。另外,如果我在构造函数中放置一个断点,它就不会被击中。

所以我想知道这是否可行,还是我需要在视图中手动创建视图模型?

P.S。我正在创建一个Windows Phone Universal应用程序。

1 个答案:

答案 0 :(得分:0)

  

在MvvmCross中是否可以将视图模型注入到视图的构造函数中?

在Windows的情况下,它可能是 - 如果你可以找出谁构造视图(它将在框架中某处?),然后你可以覆盖它以便使用IoC容器。 / p>

然而,从实际的角度来看,它可能比它的价值更大。

相反:

  • 您可以使用默认的MvvmCross ViewModel构造/查找机制 - 在OnNavigatedTo期间提供ViewModel(然后还允许使用导航参数)
  • 您可以创建自己的服务提供商查找 - 例如在View构造函数(或其他地方)中使用Mvx.Resolve<T>
  

所以我想知道这是否可行,还是我需要在视图中手动创建视图模型?

从问题的这一部分来看,我猜测某些事情只是“出错了”#34; - 但很难从这个问题中知道什么。要尝试调试它,您可以检查调试跟踪,您可以与工作示例应用程序进行比较,您可以单步执行代码等。如果所有其他方法都失败了,请下载到一个非常简单的入门应用程序并尝试调试... < / p>