2016-02-21 5 views
2

Я использую 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> 

Просьба предложить наилучшее решение или любой другой эффективный путь к этой проблеме?

ответ

-2

Мой курс PluralSight под названием «Проблемы и решения призмы: освоение TabControl» показывает вам, как решить эту проблему.

https://app.pluralsight.com/library/courses/prism-mastering-tabcontrol/table-of-contents

Вы должны расширить Prism, чтобы разрешить использование RequestNavigate с TabControl.

Кроме того, мой совет - отказаться от DataTemplates и просто использовать Views (UserControls).

+0

Спасибо за ваш ответ, но почему вы не рекомендуете этот подход? Далее, пожалуйста, дайте некоторое направление в этом отношении, чтобы использовать UserControls вместо DataTemplate. –

+0

Множество причин, из-за которых вы столкнулись. Для одного региона не поддерживаются для DataTemplates, и если у вас есть работа, что происходит, когда вам нужны облачные области в DataTemplates? Производительность - еще одна проблема. WPF perf sucks уже, теперь вы будете иметь все свои взгляды, основанные на DataTemplates, и это заставит вашу производительность приложения сосать еще больше. Не говоря уже о ремонтопригодности использования DataTemplates for Views. Это боль в заднице, и ее трудно поддерживать и расширять. –

+5

Говорить кому-то, чтобы перейти на сайт оплаты для решения, является проблематичным. –

Смежные вопросы