Regiões Dinâmicas do Prisma WPF

Sep 29 2020

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

1 AthulRaj Sep 29 2020 at 08:13

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

  1. Nome da guia
  2. Se a guia está visível.

Pode ser necessário alterar alguns detalhes de acordo com sua necessidade.