基于MvvmCross 6.0在原生Xamarin应用嵌入Xamarin Forms遇阻
解决MvvmCross 6.0中嵌入Xamarin.Forms视图时
base.OnCreate抛出异常的问题 看起来你在MvvmCross 6.0的原生Xamarin应用里嵌入Forms视图的过程中踩了坑,特别是注册IMvxFormsViewPresenter和跳转Forms页面时遇到了异常。我来帮你梳理几个关键的排查和修复点:
1. 确认IMvxFormsViewPresenter的注册逻辑是否正确
MvvmCross 6.0里Forms Presenter的注册方式有特定要求,你需要在Setup类里做完整配置:
- 先自定义一个Presenter继承自
MvxFormsViewPresenter,按需重写RegisterAttributeTypes这类方法 - 在Setup的
CreateViewPresenter方法中返回这个自定义Presenter,同时要提前初始化Xamarin.Forms:
protected override IMvxAndroidViewPresenter CreateViewPresenter() { var presenter = new CustomMvxFormsViewPresenter(AndroidViewAssemblies); Mvx.RegisterSingleton<IMvxFormsViewPresenter>(presenter); return presenter; } protected override void InitializeFirstChance() { base.InitializeFirstChance(); Xamarin.Forms.Forms.Init(this.ApplicationContext, null); }
别忘了在Setup的GetViewAssemblies方法里把你的Forms项目程序集加进去。
2. 检查Forms页面的Activity和ViewModel绑定配置
你的SettingsActivity必须正确继承自MvxFormsAppCompatActivity(或MvxFormsActivity,取决于项目类型),同时保证ViewModel绑定逻辑没问题:
SettingsActivity的代码应该类似这样:
[MvxContentPagePresentation] public class SettingsActivity : MvxFormsAppCompatActivity<SettingsViewModel> { protected override void OnCreate(Bundle savedInstanceState) { // 一定要先调用Forms初始化代码 Xamarin.Forms.Forms.Init(this, savedInstanceState); base.OnCreate(savedInstanceState); // 之前抛出异常,重点检查前面的初始化是否完整 } }
另外要确保Forms页面(比如SettingsPage)和SettingsViewModel已经正确绑定,并且在Forms项目的App类里完成了页面注册。
3. 深挖异常的具体堆栈信息
你提到调用base.OnCreate时抛异常,建议捕获并查看完整的异常堆栈,这是定位问题的关键:
- 常见触发原因包括:
- Forms初始化不完整(比如Setup或Activity里漏了
Forms.Init调用) IMvxFormsViewPresenter未正确注册,导致MvvmCross找不到处理Forms页面的Presenter- 页面和ViewModel的命名不符合MvvmCross默认约定(比如
SettingsViewModel对应SettingsPage) - 相关NuGet包版本不匹配,要确保
MvvmCross.Forms、MvvmCross.Forms.Presenter.Android等包都是6.0.x版本。
- Forms初始化不完整(比如Setup或Activity里漏了
4. 验证原生Fragment到Forms页面的跳转逻辑
从原生MainFragment跳转到Forms的Settings页面时,一定要用MvvmCross的导航服务,不要直接启动Activity:
// 在MainViewModel中使用导航服务跳转 await _navigationService.Navigate<SettingsViewModel>();
这样MvvmCross才能正确处理Presenter切换和ViewModel的生命周期。
内容的提问来源于stack exchange,提问作者Dominik Roszkowski
相关产品推荐
相关产品推荐

