C# MVVM交叉加载来自不同部件的视图和视图模型

C# MVVM交叉加载来自不同部件的视图和视图模型,c#,xamarin.forms,mvvmcross,C#,Xamarin.forms,Mvvmcross,我正在尝试从单独的部件中使用视图和视图模型。我已经读了答案,但没有一个能让我满意 方法GetViewAssemblys()和GetViewModelAssemblys()不起任何作用-未加载视图。InitializeViewLookup()方法按预期工作,但它需要手动配对所有视图和视图模型 为重现问题而采取的步骤: 下载示例: 运行MvvmCross_表单_示例解决方案 对于001XAML,例如。W81: 将mvvmcross更新为4.2.3,将Xamarin.表单更新为2.3.1.114 创建

我正在尝试从单独的部件中使用视图和视图模型。我已经读了答案,但没有一个能让我满意

方法GetViewAssemblys()和GetViewModelAssemblys()不起任何作用-未加载视图。InitializeViewLookup()方法按预期工作,但它需要手动配对所有视图和视图模型

  • 为重现问题而采取的步骤:
  • 下载示例:
  • 运行MvvmCross_表单_示例解决方案
  • 对于001XAML,例如。W81:

  • 将mvvmcross更新为4.2.3,将Xamarin.表单更新为2.3.1.114
  • 创建两个新的可移植项目库:视图、视图模型
  • 为库添加Silverlight目标
  • 将目录页面视图模型移动到适当的便携库
  • 添加必要的参考资料
  • 将代码添加到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;
    }
    
  • 运行-像一个魅力工程


  • 请上传修改后的解决方案好吗?这里是:请上传修改后的解决方案好吗?这里是:
    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);
    }