问题描述
我想构建一个自定义的viewpager适配器来操纵viewpager片段。而不是通过导航视图模型列表来加载viewpager,我将不得不在适配器中操纵(添加和删除)MvxViewPagerFragmentInfo。在处理适配器代码之前,我陷入了使用MvxViewPagerFragmentInfo将参数传递给viewmodel的麻烦。
在Mvvmcross 7之前,可以使用语法构建MvxViewPagerFragmentInfo
MvxViewPagerFragmentInfo(string title,string tag,Type fragmentType,Type viewmodelType,object parameterValuesObject = null).
可以使用这种语法轻松地传递参数。
从7.x开始,变成了
MvxViewPagerFragmentInfo(string title,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参数的正确语法或正确方法是什么?
谢谢
尼克
解决方法
我刚刚遇到了同样的问题,@Cheesebaron 帮助了我! 所以这个函数:
MvxViewPagerFragmentInfo(string title,string tag,Type fragmentType,MvxViewModelRequest request)
也可以这样使用:
MvxViewPagerFragmentInfo(string title,MvxViewModelInstanceRequest request)
因为 MvxViewModelInstanceRequest 是 MvxViewModelRequest 类型。在 MvxViewModelInstanceRequest 中,您可以传入已填充的 ViewModel 实例。
所以这一行:
new MvxViewPagerFragmentInfo("1","",typeof(Tab1View),new MvxViewModelRequest(typeof(Tab1ViewModel),mvxParmBundle,null)),
可以
new MvxViewPagerFragmentInfo("1",new MvxViewModelInstanceRequest(new Tab1ViewModel())),
所以你可以在构造函数中传递任何参数。