Я использую WPF PRISM и ищу изящный подход для добавления TabItem
, чтобы я мог перемещаться с помощью RequestNavigate
.Обработка областей PRISM внутри WPF TabControl
Этого я уже достиг, используя следующий фрагмент кода, но View1
и View2
не являются фактическими видами, на самом деле это просто помогают показать заголовок.
regionManager.RegisterViewWithRegion("TabRegion", typeof(View1));
regionManager.RegisterViewWithRegion("TabRegion", typeof(View2));
Фактическая проблема заключается в том, что я также определил области внутри DataTemplate, которые есть, чтобы визуализировать фактические представления. Первоначально я столкнулся с проблемой, чтобы RegionManager знал о моих регионах, определенных внутри DataTemplate, но с помощью этого great post я решил эту проблему.
определение Tab в XAML:
<TabControl prism:RegionManager.RegionName="TabRegion">
<TabControl.ContentTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="2" />
<ColumnDefinition Width="3*" />
</Grid.ColumnDefinitions>
<ContentControl Grid.Column="0" prism:RegionManager.RegionName="TabNavigationRegion" prism:RegionManager.RegionManager="{Binding Path=DataContext.RegionManager, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" />
<GridSplitter Grid.Column="1" HorizontalAlignment="Stretch" />
<ContentControl Grid.Column="2" prism:RegionManager.RegionName="TabContentRegion" prism:RegionManager.RegionManager="{Binding Path=DataContext.RegionManager, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" />
</Grid>
</DataTemplate>
</TabControl.ContentTemplate>
<TabControl.ItemContainerStyle>
<Style TargetType="{x:Type TabItem}">
<Setter Property="Header" Value="{Binding RelativeSource={RelativeSource Self}, Path=Content.DataContext.TabModel.Title}" />
</Style>
</TabControl.ItemContainerStyle>
</TabControl>
Просьба предложить наилучшее решение или любой другой эффективный путь к этой проблеме?
Спасибо за ваш ответ, но почему вы не рекомендуете этот подход? Далее, пожалуйста, дайте некоторое направление в этом отношении, чтобы использовать UserControls вместо DataTemplate. –
Множество причин, из-за которых вы столкнулись. Для одного региона не поддерживаются для DataTemplates, и если у вас есть работа, что происходит, когда вам нужны облачные области в DataTemplates? Производительность - еще одна проблема. WPF perf sucks уже, теперь вы будете иметь все свои взгляды, основанные на DataTemplates, и это заставит вашу производительность приложения сосать еще больше. Не говоря уже о ремонтопригодности использования DataTemplates for Views. Это боль в заднице, и ее трудно поддерживать и расширять. –
Говорить кому-то, чтобы перейти на сайт оплаты для решения, является проблематичным. –