我们在18个月内一直在使用MVVMCross。好东西。但是,我们正在寻求从Xamarin.iOS迁移到Xamarin.Forms以加快开发时间。
我们有一个带有ViewModel的PCL。但是,希望将我们的View(Pages)放在一个单独的PCL库中,以允许使用Native应用程序进行并行开发。
MVVMCross似乎无法找到页面,如果它位于单独的PCL库中,或者它位于应用程序中。但是,如果我将Page放在与ViewModel相同的PCL中,那么事情就像冠军一样。
我已尝试将以下代码放入Setup.cs
protected override IEnumerable<Assembly> GetViewAssemblies()
{
var list = new List<Assembly>();
list.AddRange(base.GetViewAssemblies());
list.Add(typeof(NuSales.Forms.Pages.TestPage).GetTypeInfo().Assembly);
return list;
}
但是,仍然没有快乐。
有关如何修复解析程序以查找视图(页面)的任何提示?
由于
答案 0 :(得分:1)
protected virtual Type GetPageType(string pageName)
{
return _request.ViewModelType.GetTypeInfo().Assembly.CreatableTypes()
.FirstOrDefault(t => t.Name == pageName);
}
...我想说你需要覆盖默认的IMvxFormsPageLoader
来改变那个单一的程序集查找。
...或(对于奖励点)您可以发送一个Pull请求来更改默认行为以使用视图程序集集合 - 它还可以存储Dictionary
到{避免多次反射传递并加快查找时间。
答案 1 :(得分:1)
希望我在StackOverflow礼仪方面做得很好。使用斯图尔特的建议......快速修复是。
创建一个FormPageLoader,如下所示。
public class MyFormsPageLoader : MvxFormsPageLoader
{
public MyFormsPageLoader() {
}
protected override Type GetPageType(string pageName)
{
return typeof(NuSales.Forms.Pages.TestPage).GetTypeInfo().Assembly.CreatableTypes().FirstOrDefault(t => t.Name == pageName);
}
}
然后你需要注册它。我在我的App.Initialize代码
中做到了public class FormsApp : MvxApplication
{
public override void Initialize()
{
base.Initialize();
Mvx.RegisterSingleton(typeof(IMvxFormsPageLoader), new MyFormsPageLoader());
RegisterAppStart<TestViewModel>();
}
}