将数据从 ParentViewModel 传递到 ChildViewModel

Passing Data from ParentViewModel to ChildViewModel

我正在尝试将数据从视图模型 (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 的方法。有什么想法吗?

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

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

实现示例

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

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

然后在您的子视图模型中通过 Init

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