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

本文关键字:视图 注入 构造函数 模型 MvvmCross | 更新日期: 2023-09-27 18:32:38

是否可以

在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>();

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

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

附言我正在创建一个Windows Phone Universal应用程序。

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

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

在Windows的情况下,它可能是 - 如果你能弄清楚谁构造了视图(它会在框架的某个地方?(,如果你可以覆盖它以使用IoC容器。

但是,从实际的角度来看,这可能比它的价值付出更多的努力。

相反:

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

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

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