Regiões Dinâmicas do Prisma WPF
Digamos que tenhamos um aplicativo Prism 7 com módulos A e B. A janela principal tem um Controle de guia e dois botões, que adicionam o módulo A ou B ao Controle de guia. Eu criei uma ligação para os itens do Tab Control e implementei um modelo de item, que inclui Prism Region, cujo nome está ligado ao nome do item.
<TabControl ItemsSource="{Binding Tabs}">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"/>
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<ContentControl prism:RegionManager.RegionName="{Binding}" />
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
O problema que estou enfrentando é que o nome da região não parece mudar, ou seja, se eu adicionar o Módulo A primeiro, todos os próximos cliques no botão adicionarão o Módulo A e vice-versa. Em minha pergunta anterior Prism WPF Binding RegionManager.RegionName, fui explicado que não devo vincular o RegionManger.RegionName, então minha pergunta é, como devo implementar os requisitos?
Link para o repo: https://github.com/moisejbraver/ModulesTest
Respostas
Esta é a maneira como manuseio os controles de guia com regiões de prisma, acho que isso é útil para você também.
<TabControl prism:RegionManager.RegionName="{x:Static local:RegionNames.AdvancedSetup}">
<TabControl.ItemContainerStyle>
<Style TargetType="TabItem">
<Setter Property="Visibility" Value="{Binding DataContext.IsAvailable, Converter={coverters:BooleanToVisibilityConverter}}"/>
<Setter Property="Header" Value="{Binding DataContext.Name}"/>
</Style>
</TabControl.ItemContainerStyle>
</TabControl>
Em seguida, registro todas as minhas guias na mesma região na função OnInitialized de cada módulo.
regionManager.RegisterViewWithRegion(RegionNames.AdvancedSetup, setupType);
Eu fiz uma interface que todos os modelos de visualização das guias irão implementar, ela contém
- Nome da guia
- Se a guia está visível.
Pode ser necessário alterar alguns detalhes de acordo com sua necessidade.