PrismWPF動的領域
Sep 29 2020
モジュールAとBを備えたPrism7アプリケーションがあるとします。メインウィンドウには、タブコントロールと2つのボタンがあり、モジュールAまたはBのいずれかをタブコントロールに追加します。タブコントロールアイテムのバインディングを作成し、名前がアイテム名にバインドされているPrismRegionを含むアイテムテンプレートを実装しました。
<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>
私が直面している問題は、リージョン名が変更されていないように見えることです。つまり、最初にモジュールAを追加すると、次にボタンをクリックするたびにモジュールAが追加され、その逆も同様です。以前の質問で、Prism WPF Binding RegionManager.RegionNameをバインドするべきではないと説明されたRegionManger.RegionNameので、私の質問は、要件をどのように実装する必要があるかということです。
リポジトリへのリンク: https://github.com/moisejbraver/ModulesTest
回答
1 AthulRaj Sep 29 2020 at 08:13
これは私がプリズム領域でタブコントロールを処理する方法です、これはあなたにも役立つと思います。
<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>
次に、各モジュールのOnInitialized関数で、すべてのタブを同じ領域に登録します。
regionManager.RegisterViewWithRegion(RegionNames.AdvancedSetup, setupType);
タブのすべてのビューモデルが実装するインターフェースを作成しました。
- タブの名前
- タブが表示されているかどうか。
必要に応じて、詳細を変更する必要がある場合があります。