Regiones dinámicas de Prism WPF
Digamos que tenemos una aplicación Prism 7 con los módulos A y B. La ventana principal tiene un Control de pestaña y dos botones, que agregan el módulo A o B al Control de pestaña. Creé un enlace para los elementos de Tab Control e implementé una plantilla de elemento, que incluye Prism Region, cuyo nombre está vinculado al nombre del elemento.
<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>
El problema al que me enfrento es que el nombre de la región no parece cambiar, es decir, si primero agrego el Módulo A, todos los siguientes clics del botón agregarán el Módulo A y viceversa. En mi pregunta anterior, Prism WPF Binding RegionManager.RegionName se me explicó que no debería vincular RegionManger.RegionName, por lo que mi pregunta es, ¿cómo debo implementar los requisitos?
Enlace al repositorio: https://github.com/moisejbraver/ModulesTest
Respuestas
Esta es la forma en que manejo los controles de pestañas con regiones de prisma, creo que esto también es útil para usted.
<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>
Luego registro todas mis pestañas en la misma región en la función OnInitialized de cada módulo.
regionManager.RegisterViewWithRegion(RegionNames.AdvancedSetup, setupType);
He creado una interfaz que implementarán todos los modelos de vista de pestañas, contiene
- Nombre de la pestaña
- Si la pestaña está visible.
Es posible que deba cambiar algunos detalles según sus necesidades.