2017-07-06 4 views
1

Comment puis-je transmettre un paramètre à mon viewmodel lorsque je crée une liste de fragments pour un viewpager?MvxCachingFragmentStatePagerAdapter passe le paramètre à viewmodel

J'essaie d'utiliser le "parametervaluesobject" dans "MvxCachingFragmentStatePagerAdapter.FragmentInfo" mais cela ne semble pas fonctionner.

[MvxFragment(typeof(MainViewModel), Resource.Id.content_frame, true)] 
[Register("mvvmcrosslearning.droid.fragments.DateFragment")] 
public class DateFragment : BaseFragment<DateViewModel> 
{ 
    protected override int FragmentId => Resource.Layout.fragment_date; 

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     var view = base.OnCreateView(inflater, container, savedInstanceState); 

     var viewPager = view.FindViewById<ViewPager>(Resource.Id.viewpager); 
     if (viewPager != null) 
     { 
      var fragments = new List<MvxCachingFragmentStatePagerAdapter.FragmentInfo>(); 
      for (int i = 0; i < 3; i++) 
       fragments.Add(new MvxCachingFragmentStatePagerAdapter.FragmentInfo($"Date {i}", 
        typeof(RecyclerViewFragment), typeof(RecyclerViewModel), new Device() { Date = $"Date {i}" })); 


      viewPager.Adapter = new MvxCachingFragmentStatePagerAdapter(Activity,ChildFragmentManager,fragments); 
      viewPager.OffscreenPageLimit = 1; 
     } 

     var tabLayout = view.FindViewById<TabLayout>(Resource.Id.tabs); 
     tabLayout.SetupWithViewPager(viewPager); 

     return view; 

    } 
} 
+1

Vous pouvez lire ceci: https://www.mvvmcross.com/documentation/fundamentals/app-lifecycle# 1-construction –

Répondre

1

Merci à vous York Shen. J'ai trouvé comment obtenir les données dans mon ViewModel: Juste remplacer cette méthode dans ViewModel du RecyclerViewModel:

protected override void InitFromBundle(IMvxBundle parameters) 
    { 
     base.InitFromBundle(parameters); 
     Device = new Device() 
     { 
      Date = parameters.Data["Date"] 
     }; 
     RaisePropertyChanged(() => Device); 
    }