在Prism v2应用程序中,我定义了两个区域,每个区域都是tabcontrol中的一个tabitem:
在引导程序中加载了两个模块,每个模块都为每个tabitems注入一个视图:
protected override IModuleCatalog GetModuleCatalog() { ModuleCatalog catalog = new ModuleCatalog(); catalog.AddModule(typeof(SecondModule.SecondModule)); catalog.AddModule(typeof(HelloWorldModule.HelloWorldModule)); return catalog; }
现在,当然,我想要执行我一直阅读的解耦魔法并取消注释其中一个模块,并看到它的标签项根本不显示.相反,相反,仍然有两个TabItem,一个是空的.这告诉我,我的应用程序仍然紧密地耦合数据和UI,就像旧的WinForm时代那样.
那么我需要做些什么来使这个动态化,以便UI根据加载的模块动态变化,即我可以在我的引导程序中加载10个模块/视图,TabControl中会自动出现10个TabItems?
如果我只是在TabControl中创建一个区域:
然后将两个控件加载到MainRegion中:
public void Initialize() { regionManager.RegisterViewWithRegion("MainRegion", typeof(Views.SecondView)); } ... public void Initialize() { regionManager.RegisterViewWithRegion("MainRegion", typeof(Views.HelloWorldView)); }
然后我得到一个带有两个标签的TabControl,每个标签都有一个视图,这就是我想要的.
但是没有定义TabItem标头.如何动态定义标头(例如,不是在XAML中,而是在View类中动态地返回)?
这也有效:
public class View : UserControl { public string ViewName { get; set; } }
然后在shell中:
...
尼斯.
您可以删除视图上的ViwewName属性,并将TabItem值的绑定更改为Value ="{Binding DataContext.HeaderInfo}"...其中HeaderInfo是DataContext对象的属性 - IE是Tab项的业务对象代表.这更优雅一点.