2017-08-01 1 views
0

Ich versuche, Daten von einem Ansichtsmodell (VM) zu ParentViewPagerVM zu ChildTabVM zu übergeben. In meiner ersten VM bekomme ich die Daten, die ich an ChildTabVM weitergeben möchte. Ich konnte keine Lösung finden, wie das geht.Übergeben von Daten von ParentViewModel an ChildViewModel

FirstViewModel.cs

public MvxCommand GoToLocationInfoCommand 
{ 
    get 
    { 
     return new MvxCommand(
      () => ShowViewModel<LocationViewPager>(new { param = "Test"})); 
    } 
} 

ParentViewPagerViewModel.cs

public void Init(string param) 
{ 
    Debug.WriteLine("Paramter: " + ZipCode); 
} 

ParentViewPagerFragment.cs

if (viewPager != null) 
{ 
    var fragments = new List<MvxCachingFragmentStatePagerAdapter.FragmentInfo> 
    { 
     new MvxCachingFragmentStatePagerAdapter.FragmentInfo(
      "Tab1", typeof(Child1Fragment), typeof(Child1ViewModel)), 
     new MvxCachingFragmentStatePagerAdapter.FragmentInfo(
      "Tab2", typeof(Child2Fragment), typeof(Child2ViewModel)), 
     new MvxCachingFragmentStatePagerAdapter.FragmentInfo(
      "Tab3", typeof(Child3Fragment), typeof(Child3ViewModel)) 
    }; 

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

Da ich eine tabView mache, kann ich keine Möglichkeit finden, Daten von meiner ParentViewPagerVM an Child1VM zu übergeben. Irgendeine Idee?

Antwort

2

MvxCachingFragmentStatePagerAdapter.FragmentInfo Konstruktor bietet eine Option zum Übergeben von Parametern an den ViewModel-Typ, den Sie erstellen möchten.

public FragmentInfo(
    string title, 
    Type fragmentType, 
    Type viewModelType, 
    object parameterValuesObject = null); 

Implementierung Beispiel

Sie Angenommen, haben eine Eigenschaft ZipCode auf Ihrem ParentViewPagerViewModel Sie als Parameter übergeben können.

var fragments = new List<MvxCachingFragmentStatePagerAdapter.FragmentInfo> 
{ 
    new MvxCachingFragmentStatePagerAdapter.FragmentInfo(
     title: "Tab1", 
     fragmentType: typeof(Child1Fragment), 
     viewModel: typeof(Child1ViewModel), 
     parameterValuesObject: new { zipCode = ViewModel.ZipCode}) 
}; 

Dann in Ihrem Kind Ansichtsmodell abrufen es über die Init

public void Init(int zipCode) 
{ 
    // Do stuff with zipCode 
} 
+0

Kann ich mehrere Parameter auf dieser Linie weitergeben: 'parameterValuesObject: new {zipCode = ViewModel.ZipCode})'? –

+0

Egal, ich habe gerade das Szenario mit mehreren Parametern getestet und es funktioniert perfekt. –

Verwandte Themen