【问题标题】:Prism WPF Dynamic RegionsPrism WPF 动态区域
【发布时间】:2020-09-29 07:09:14
【问题描述】:

假设我们有一个带有模块 A 和 B 的 Prism 7 应用程序。主窗口有一个选项卡控件和两个按钮,它们将模块 A 或 B 添加到选项卡控件。我为 Tab Control 项目创建了一个绑定,并实现了一个项目模板,其中包括 Prism Region,其名称与项目名称绑定。

<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

【问题讨论】:

  • 您应该只为 tabcontrol 分配一个区域,并将所有选项卡注册到同一区域。

标签: c# wpf prism


【解决方案1】:

这是我处理带有棱镜区域的选项卡控件的方式,我认为这对你也有帮助。

<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);

我已经制作了一个界面,所有选项卡的视图模型都将实现, 它包含

  1. 标签名称
  2. 标签是否可见。

您可能需要根据需要更改一些细节。

【讨论】:

  • 我之前完全误解了区域的概念及其用途,非常感谢!
猜你喜欢
  • 2012-10-12
  • 2021-10-03
  • 2013-10-31
  • 2010-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-29
  • 2010-12-04
相关资源
最近更新 更多