如何使用unity将相同的viewmodel传递给子视图?

时间:2009-05-12 00:51:00

标签: silverlight unity-container prism

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

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

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

干杯,

阿里

1 个答案:

答案 0 :(得分:6)

如果你正在使用Prism,那么你可以使用RegionContext。

为TabControl指定RegionContext:

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

使用RegionContext上的静态GetObservableContext方法从添加到此区域的Views中访问它:

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

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

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

稍后使用:

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