android - 如何在 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 参数的正确语法或正确方法是什么?
谢谢,
缺口
解决方案
我刚遇到同样的问题,@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())),
所以你可以在构造函数中传递任何参数。
推荐阅读
- reactjs - 解析错误:“链接”标识符已被声明
- java - 给定表达式集的正则表达式匹配(提取最后一列元素)
- xamarin - 如何在 Xamarin webview 中加载在线 pdf 文件?
- sql - 使用触发器检查 SQL Server 中的输入时如何忽略一些无效行?
- https - 我应该如何使用 android 令牌?
- angular - Angular 中每个客户的一个构建,不同的全局风格
- php - 获取除字段 Laravel: Excel 之外的所有行
- string - 何通过多个标签拆分字符串,然后一个一个地处理它
- javascript - 如何在 React 应用程序中使用纯 JS 小部件
- json - Spring boot - 如果响应状态为 500/503,用户没有收到响应正文