Prism WPF Dynamic Regions
Angenommen, wir haben eine Prism 7-Anwendung mit den Modulen A und B. Das Hauptfenster verfügt über ein Tab-Steuerelement und zwei Schaltflächen, mit denen Modul A oder B zum Tab-Steuerelement hinzugefügt werden. Ich habe eine Bindung für die Registersteuerelementelemente erstellt und eine Elementvorlage implementiert, die die Prismenregion enthält, deren Name an den Elementnamen gebunden ist.
<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>
Das Problem, mit dem ich konfrontiert bin, ist, dass sich der Name der Region nicht zu ändern scheint. Wenn ich also zuerst Modul A hinzufüge, fügen alle nächsten Tastenklicks Modul A hinzu und umgekehrt. In meiner vorherigen Frage Prism WPF Binding RegionManager.RegionName wurde mir erklärt, dass ich das nicht binden sollte. RegionManger.RegionNameMeine Frage ist also, wie ich die Anforderungen implementieren soll.
Link zum Repo: https://github.com/moisejbraver/ModulesTest
Antworten
Dies ist die Art und Weise, wie ich mit Registerkartensteuerelementen mit Prismenbereichen umgehe. Ich denke, dies ist auch für Sie hilfreich.
<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>
Dann registriere ich alle meine Registerkarten in derselben Region in der OnInitialized-Funktion jedes Moduls.
regionManager.RegisterViewWithRegion(RegionNames.AdvancedSetup, setupType);
Ich habe eine Schnittstelle erstellt, die alle Ansichtsmodelle von Registerkarten implementieren, die sie enthält
- Name der Registerkarte
- Ob die Registerkarte sichtbar ist.
Möglicherweise müssen Sie einige Details je nach Bedarf ändern.