В приложении Prism v2 я определяю две области, каждая из которых является вкладкой в элементе управления вкладками:
<UniformGrid Margin="10">
<TabControl>
<TabItem Header="First" Name="MainRegion" cal:RegionManager.RegionName="MainRegion"/>
<TabItem Header="Second" Name="SecondRegion" cal:RegionManager.RegionName="SecondRegion"/>
</TabControl>
</UniformGrid>
В загрузчике загружаются два модуля, и каждый вводит представление в каждый из элементов вкладки:
protected override IModuleCatalog GetModuleCatalog()
{
ModuleCatalog catalog = new ModuleCatalog();
catalog.AddModule(typeof(SecondModule.SecondModule));
catalog.AddModule(typeof(HelloWorldModule.HelloWorldModule));
return catalog;
}
Теперь, конечно, я хочу выполнить магию развязки, о которой я продолжаю читать, раскомментировать один из модулей и увидеть, что его элемент вкладки вообще не отображается. Вместо этого, напротив, по-прежнему есть два элемента TabItem и один пуст. Это говорит мне о том, что мое приложение по-прежнему тесно связывает данные и пользовательский интерфейс, как в старые плохие дни WinForm.
Итак, что мне нужно сделать здесь, чтобы сделать это динамическим, чтобы пользовательский интерфейс менялся динамически в зависимости от того, какие модули загружены, т.е. чтобы я мог загрузить 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, а динамически обратно в классы представления)?