微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在MvxViewPagerFragmentInfo中指定viewmodel参数

如何解决如何在MvxViewPagerFragmentInfo中指定viewmodel参数

我想构建一个自定义的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())),

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。