代码之家  ›  专栏  ›  技术社区  ›  Ali Shafai

如何使用Unity将相同的ViewModel传递给子视图?

  •  2
  • Ali Shafai  · 技术社区  · 17 年前

    我有一个业务对象,比如说客户,它有太多的字段要在一个页面中显示,所以我将它拆分为不同的选项卡页面。数据不是以一种我可以将其拆分为有意义的位(如地址、有状态、街道名称等)的方式,因此我决定保留相同的模型和视图模型,并将不同的视图(每个选项卡页内容是不同的视图)绑定到同一个视图模型。

    首先,这是正确的方法,为什么不呢?

    其次,如果是的话,我该如何用统一来传递 相同的 视图模型到子视图?目前我使用构造函数注入,但它们是视图模型的新实例。

    干杯,

    阿里

    1 回复  |  直到 16 年前
        1
  •  6
  •   sth    16 年前

    如果使用prism,则可以使用regionContext。

    为TabControl指定RegionContext:

    <TabControl cal:RegionManager.RegionName="MyTabControl"
    cal:RegionManager.RegionContext="{Binding Path=ViewModel}">
    

    并使用RegionContext上的静态getObservableContext方法从添加到此区域的视图访问它:

    void ViewConstructor()
    {
    this.ViewModel = (MyViewModel)RegionContext.GetObservableContext(this).Value;
    }
    

    如果不使用Prism,则可以将ViewModel注册为命名实例:

    Container.RegisterInstance<IMyViewModel>("viewModelName", new MyViewModel());
    

    稍后使用:

    Container.Resolve<IMyViewModel>("viewModelName");