首页 > 解决方案 > 如何在 MvxViewPagerFragmentInfo 中指定 viewmodel 参数

问题描述

我想构建一个自定义 viewpager 适配器来操作 viewpager 片段。我将不得不在适配器中操作(添加和删除)MvxViewPagerFragmentInfo,而不是通过导航视图模型列表来加载 viewpager。在处理适配器代码之前,我一直在使用 MvxViewPagerFragmentInfo 将参数传递给 viewmodel。

在 Mvvmcross 7 之前,可以使用语法构建 MvxViewPagerFragmentInfo

MvxViewPagerFragmentInfo(string title, string tag, Type fragmentType, Type viewModelType, object parameterValuesObject = null).

使用此语法可以轻松传递参数。

从 7.x 开始,它变成

MvxViewPagerFragmentInfo(string title, string tag, Type fragmentType, MvxViewModelRequest request) 

在哪里

MvxViewModelRequest(Type viewModelType, IMvxBundle parameterBundle, IMvxBundle presentationBundle)

我不能再传递参数。

我尝试使用以下代码在 MvxViewModelRequest 中指定参数但不成功:

IMvxJsonConverter mvxJsonConverter = Mvx.IoCProvider.Resolve<IMvxJsonConverter>();
Core.Models.AppSetting appSetting = new Core.Models.AppSetting() { Id = 1 };
IMvxBundle mvxParmBundle = new MvxBundle(new Dictionary<string, string> { { "parameter", mvxJsonConverter.SerializeObject(appSetting) } });
var fragments = new List<MvxViewPagerFragmentInfo>
{
    new MvxViewPagerFragmentInfo("1", "", typeof(Tab1View), new MvxViewModelRequest(typeof(Tab1ViewModel), mvxParmBundle, null)),
    new MvxViewPagerFragmentInfo("2", "", typeof(Tab2View), new MvxViewModelRequest(typeof(Tab2ViewModel))),
    new MvxViewPagerFragmentInfo("3", "", typeof(Tab3View), new MvxViewModelRequest(typeof(Tab3ViewModel)))
};
viewPager.Adapter = new MvxCachingFragmentStatePagerAdapter(Activity, ChildFragmentManager, fragments);

加载 Tab1ViewModel 时,不会触发 Prepare 函数。在 MvxViewPagerFragmentInfo 中指定 viewmodel 参数的正确语法或正确方法是什么?

谢谢,

缺口

标签: androidxamarinandroid-viewpagermvvmcross

解决方案


我刚遇到同样的问题,@Cheesebaron 帮助了我!所以这个函数:

MvxViewPagerFragmentInfo(string title, string tag, Type fragmentType, MvxViewModelRequest request)

也可以这样使用:

MvxViewPagerFragmentInfo(string title, string tag, Type fragmentType, MvxViewModelInstanceRequest request)

因为 MvxViewModelInstanceRequest 是 MvxViewModelRequest 类型。在 MvxViewModelInstanceRequest 中,您只需传入您填充的 ​​ViewModel 实例。


所以这一行:

new MvxViewPagerFragmentInfo("1", "", typeof(Tab1View), new MvxViewModelRequest(typeof(Tab1ViewModel), mvxParmBundle, null)),

只能是

new MvxViewPagerFragmentInfo("1", "", typeof(Tab1View), new MvxViewModelInstanceRequest(new Tab1ViewModel())),

所以你可以在构造函数中传递任何参数。


推荐阅读