Activity Viewmodel如何从Fragment子ViewModel获取数据?

时间:2018-08-09 01:19:49

标签: c# xamarin.android mvvmcross

我正在使用MvvmCross开发Xamarin.Android应用程序,并且试图将存储的数据从主要活动Viewmodel获取到Fragment Viewmodel中。

这就是我所拥有的。

enter image description here

我正在使用

  • 活动的ActivityViewModel
  • FragmentA的FragmentAViewModel
  • FragmentB的FragmentBViewModel

因此,我正在尝试从ActivityViewModel对象访问FragmentAViewModel.SomeProperty。

有可能吗?

我正在使用IMvxMessenger作为一种变通方法,以“发送”带有我要访问的属性内容的通知到ActivityViewModel。

还有其他方法可以实现吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

一种选择是使用依赖项注入系统来创建一个单例,该单例可用作视图模型之间的共享上下文。

示例

public interface ISharedContext 
{
    string Name { get; set; }
}

public class SharedContext : MvxNotifyPropertyChanged, ISharedContext 
{
    string _name;
    public string Name
    {
        get { return _name; }
        set { SetProperty(ref _name, value); }
    }
}

在您的App类中注册SharedContext

Mvx.LazyConstructAndRegisterSingleton<ISharedContext, SharedContext>();

在视图模型中的用法。然后,您可以直接绑定到SharedContext或为其属性分配并在不同的视图模型中使用。

public class FragmentAViewModel : MvxViewModel
{
    public ISharedShoppingCart SharedContext { get; }

    public FragmentAViewModel(ISharedContext sharedContext)
    {
        SharedContext = sharedContext;
    }
}

public class ActivityViewModel : MvxViewModel
{
    public ISharedShoppingCart SharedContext { get; }

    public ActivityViewModel(ISharedContext sharedContext)
    {
        SharedContext = sharedContext;
    }
}