You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MvvmCross 6.0中指定使用共享项目视图?新手配置求助

嗨,很高兴听到你Xamarin.Forms的学习进展顺利!关于MvvmCross 6.0中使用共享项目视图的问题,我来帮你梳理下关键步骤,应该能帮你搞定之前卡壳的配置问题:

配置MvvmCross 6.0使用共享项目视图

MvvmCross完全支持Xamarin.Forms的共享视图,只是官方示例更多侧重原生实现而已,核心是让框架识别你的共享视图并建立和ViewModel的绑定关系,具体步骤如下:

1. 确认项目结构与包引用

  • 你的解决方案需要包含:存放Xamarin.Forms视图(ContentPage/ContentView等)和ViewModel的共享项目(或.NET Standard库),以及Android、iOS各自的平台项目。
  • 共享项目需引用MvvmCross和MvvmCross.Forms NuGet包;Android项目引用MvvmCross.Forms.Platforms.Android,iOS项目引用MvvmCross.Forms.Platforms.iOS,确保所有包的版本都是6.0.x,版本不一致很容易引发配置问题。

2. 编写共享项目的MvvmCross应用类

在共享项目中创建继承自MvxFormsApplication<TViewModel>的应用类,这里的TViewModel是你的启动页ViewModel:

public class App : MvxFormsApplication<MainViewModel>
{
    protected override void InitializeForms()
    {
        Xamarin.Forms.Forms.Init();
        // 设置应用的主页面,这里直接使用共享项目中的MainPage
        MainPage = new NavigationPage(new MainPage());
    }
}

3. 配置平台项目的Setup类

每个平台项目都需要一个Setup类,用来初始化MvvmCross并关联你的共享应用:

Android平台的Setup类

public class Setup : MvxFormsAndroidSetup<App, MainViewModel>
{
    protected override IMvxApplication CreateApp()
    {
        return new App();
    }
}

iOS平台的Setup类

public class Setup : MvxFormsIosSetup<App, MainViewModel>
{
    protected override IMvxApplication CreateApp()
    {
        return new App();
    }
}

注意:这里一定要继承Forms对应的Setup基类,而不是原生MvvmCross的Setup类,这是很多新手容易踩的坑。

4. 建立ViewModel与共享视图的关联

MvvmCross默认通过命名约定自动关联:比如MainViewModel会对应MainPage(视图类名=ViewModel类名去掉"ViewModel"后缀)。如果你的命名不符合这个规则,可以手动注册导航路由,在App类的初始化逻辑中添加:

Mvx.IoCProvider.Resolve<IMvxNavigationService>()
    .AddNavigationRoute<CustomViewModel, CustomViewPage>();

5. 使用导航服务跳转共享视图

在ViewModel中注入IMvxNavigationService,就可以轻松实现跨平台导航:

private readonly IMvxNavigationService _navigationService;

public MainViewModel(IMvxNavigationService navigationService)
{
    _navigationService = navigationService;
}

public async Task NavigateToNextPage()
{
    await _navigationService.Navigate<NextViewModel>();
}

常见问题排查

  • 如果视图无法显示,先检查App类中是否正确设置了MainPage;
  • 导航无响应时,确认ViewModel的构造函数是否正确注入了IMvxNavigationService,且路由关联正确;
  • 若出现初始化异常,优先检查所有MvvmCross包的版本是否统一。

内容的提问来源于stack exchange,提问作者King Chan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:57:19