在 Prism v2 应用程序中,我定义了两个区域,每个区域都是 tabcontrol 中的一个 tabitem:
<UniformGrid Margin="10">
<TabControl>
<TabItem Header="First" Name="MainRegion" cal:RegionManager.RegionName="MainRegion"/>
<TabItem Header="Second" Name="SecondRegion" cal:RegionManager.RegionName="SecondRegion"/>
</TabControl>
</UniformGrid>
在引导程序中加载了两个模块,每个模块都将一个视图注入到每个 tabitems 中:
protected override IModuleCatalog GetModuleCatalog()
{
ModuleCatalog catalog = new ModuleCatalog();
catalog.AddModule(typeof(SecondModule.SecondModule));
catalog.AddModule(typeof(HelloWorldModule.HelloWorldModule));
return catalog;
}
现在,当然,我想执行我一直在阅读的解耦魔术并取消注释其中一个模块,并看到它的选项卡项根本没有出现。而是相反,还是有两个TabItem,一个是空的。这告诉我,我的应用程序仍然像以前糟糕的 WinForm 时代一样紧密耦合数据和 UI。
那么我需要在这里做什么才能使这个动态化,以便 UI 根据加载的模块动态更改,即我可以在我的引导程序中加载 10 个模块/视图,并且 TabControl 中会自动有 10 个 TabItems?
中间答案:
如果我只在 TabControl 中创建一个区域:
<TabControl Name="MainRegion" cal:RegionManager.RegionName="MainRegion"/>
然后将两个控件加载到 MainRegion 中:
public void Initialize()
{
regionManager.RegisterViewWithRegion("MainRegion", typeof(Views.SecondView));
}
...
public void Initialize()
{
regionManager.RegisterViewWithRegion("MainRegion", typeof(Views.HelloWorldView));
}
然后我得到一个带有两个选项卡的 TabControl,每个选项卡都有一个视图,这就是我想要的。
但未定义 TabItem 标头。如何动态定义标头(例如不在 XAML 中,而是在 View 类中动态定义)?