将数据从ParentViewModel传递到ChildViewModel

时间:2017-08-01 19:49:22

标签: c# tabs xamarin.android android-viewpager mvvmcross

我正在尝试将数据从视图模型(VM)传递到ParentViewPagerVMChildTabVM。在我的第一个VM中,我获取了要传递给ChildTabVM的数据。我找不到任何解决办法。

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);
}

由于我正在制作tabView,因此我找不到将数据从ParentViewPagerVM传递到Child1VM的方法。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

MvxCachingFragmentStatePagerAdapter.FragmentInfo构造函数提供了一个选项,用于将参数传递给您想要构造的ViewModel类型。

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

实施例

假设您ZipCode上有一个属性ParentViewPagerViewModel,您可以将其作为参数传递。

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

然后在您的Child ViewModel中通过Init

检索它
public void Init(int zipCode)
{
   // Do stuff with zipCode
}