mvvmcross加载视图并查看来自不同程序集的模型

时间:2016-08-19 17:34:43

标签: c# xamarin.forms mvvmcross

我正在尝试使用不同程序集中的视图和视图模型。我已经阅读了答案:https://stackoverflow.com/a/17200358/4550962https://stackoverflow.com/a/35358504/4550962,但对我来说并不令人满意。

方法GetViewAssemblies()和GetViewModelAssemblies()没有任何效果 - 未加载视图。 InitializeViewLookup()方法按预期工作,但需要手动配对所有视图和视图模型。

  1. 为重现问题而采取的步骤:
  2. 下载示例:https://github.com/MvvmCross/MvvmCross-Forms.git
  3. 运行MvvmCross_Forms_Examples解决方案
  4. 对于001XAML,例如:W81:

    1. 将mvvmcross更新为4.2.3,将Xamarin.Forms更新为2.3.1.114
    2. 创建两个新的可移植项目库:Views,ViewModels
    3. 为库添加Silverlight目标
    4. 将目录页面 ViewModels 移至apriopriate可移植库
    5. 添加必要的参考资料。
    6. 将代码添加到Setup.cs:

      protected override IEnumerable<Assembly> GetViewAssemblies()
      {
          var list = new List<Assembly>();
          list.AddRange(base.GetViewAssemblies());
          list.Add(typeof(Example.Pages.FirstPage).GetTypeInfo().Assembly);
      
          return list;
      }
      
      protected override IEnumerable<Assembly> GetViewModelAssemblies()
      {
          var list = new List<Assembly>();
          list.AddRange(base.GetViewModelAssemblies());
          list.Add(typeof(Example.ViewModels.FirstViewModel).GetTypeInfo().Assembly);
      
          return list;
      }
      
    7. 运行 - 效果为ArgumentNullException:值不能为空。参数名称:newRoot

    8.   

      在Xamarin.Forms.Platform.WinRT.Platform.SetPage(Page newRoot)
        在   Xamarin.Forms.Platform.WinRT.WindowsBasePage.LoadApplication(应用   应用程序)在Example.W81.MainPage..ctor()at   Example.W81.Example_W81_XamlTypeInfo.XamlTypeInfoProvider.Activate_4_MainPage()at at   Example.W81.Example_W81_XamlTypeInfo.XamlUserType.ActivateInstance()

      1. 评论代码来自6)并添加:

        protected override void InitializeViewLookup()
        {
            var viewModelLookup = new Dictionary<Type, Type>
            {
                {typeof(ViewModels.AboutViewModel), typeof(Pages.AboutPage)},
                {typeof(ViewModels.FirstViewModel), typeof(Pages.FirstPage)}
            };
        
            var container = Mvx.Resolve<IMvxViewsContainer>();
            container.AddAll(viewModelLookup);
        }
        
      2. 跑步 - 像魅力一样工作

0 个答案:

没有答案