簡體   English   中英

如何在 MvxViewPagerFragmentInfo 中指定 viewmodel 參數

[英]How to specify viewmodel parameter in MvxViewPagerFragmentInfo

我想構建一個自定義 viewpager 適配器來操作 viewpager 片段。 我將不得不在適配器中操作(添加和刪除)MvxViewPagerFragmentInfo,而不是通過導航視圖模型列表來加載 viewpager。 在處理適配器代碼之前,我一直在使用 MvxViewPagerFragmentInfo 將參數傳遞給視圖模型。

在 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())),

所以你可以在構造函數中傳遞任何參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM