我有一个业务对象,比方说客户,它有太多的字段要显示在一个页面中,所以我将它拆分为不同的标签页。数据不是我可以将它分成有意义的位(如地址,状态,街道名称等),所以我决定保持相同的模型和视图模型,并有不同的视图(每个标签页的内容是一个不同的视图)绑定到相同的视图模型。
首先,这是正确的方法,为什么不呢?
其次,如果是,如何使用unity将相同的视图模型传递给子视图?目前我使用构造函数注入,但它们是视图模型的新实例。
干杯,
阿里
答案 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");