Search code examples
c#wpfprismtabcontrol

Bind a collection to a WPF TabControl with static TabItems


I have a TabControl with a couple of static TabItems. I am now trying to dynamically add some tabs with a custom ItemTemplate and ContentTemplate.

Something like this:

<TabControl ItemsSource="{Binding DynamicTabs}">  
    <TabItem Header="Static 1">Content 1</TabItem>  
    <TabItem Header="Static2">Content 2</TabItem>
    <TabControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Header}" />
        </DataTemplate>
    </TabControl.ItemTemplate>
    <TabControl.ContentTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Content}" />
        </DataTemplate>
    </TabControl.ContentTemplate> 
</TabControl>

Is there any way to achieve this?


Solution

  • You can use the CompositeCollection to combine your different sources:

    <TabControl>
        <TabControl.Resources>
            <CollectionViewSource x:Key="DynamicTabsCollectionVS" Source="{Binding DynamicTabs}"/>
        </TabControl.Resources>
        <TabControl.ItemsSource>
            <CompositeCollection>
                <TabItem Header="Static 1">Content 1</TabItem>
                <TabItem Header="Static 2">Content 2</TabItem>
                <CollectionContainer Collection="{Binding Source={StaticResource DynamicTabsCollectionVS}}" />
            </CompositeCollection>
        </TabControl.ItemsSource>
        <TabControl.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Header}" />
            </DataTemplate>
        </TabControl.ItemTemplate>
        <TabControl.ContentTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Content}" />
            </DataTemplate>
        </TabControl.ContentTemplate>
    </TabControl>