Prism WPF Dynamic Regions
Supponiamo di avere un'applicazione Prism 7 con i moduli A e B. La finestra principale ha un controllo scheda e due pulsanti, che aggiungono il modulo A o B al controllo scheda. Ho creato un'associazione per gli elementi Controllo struttura a schede e implementato un modello di elemento, che include Prism Region, il cui nome è associato al nome dell'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>
Il problema che sto affrontando è che il nome della regione non sembra cambiare, cioè se aggiungo prima il Modulo A, tutti i successivi clic sui pulsanti aggiungeranno il Modulo A e viceversa. Nella mia domanda precedente Prism WPF Binding RegionManager.RegionName mi è stato spiegato che non dovrei associare RegionManger.RegionName, quindi la mia domanda è: come devo implementare i requisiti?
Collegamento al repo: https://github.com/moisejbraver/ModulesTest
Risposte
Questo è il modo in cui gestisco i controlli a schede con le regioni prismatiche, penso che questo sia utile anche per te.
<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>
Quindi registro tutte le mie schede nella stessa regione nella funzione OnInitialized di ciascun modulo.
regionManager.RegisterViewWithRegion(RegionNames.AdvancedSetup, setupType);
Ho creato un'interfaccia che tutti i viewmodels delle schede implementeranno, contiene
- Nome della scheda
- Se la scheda è visibile.
Potrebbe essere necessario modificare alcuni dettagli in base alle proprie esigenze.