2

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

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

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

干杯,

阿里

4

1 回答 1

6

如果您使用的是 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");
于 2009-05-12T06:50:08.193 回答