C#WPF MVVM选项卡项头模板赢得';不行?

C#WPF MVVM选项卡项头模板赢得';不行?,c#,wpf,mvvm,C#,Wpf,Mvvm,我目前正在使用TabControl开发一个应用程序,每个选项卡都有一个ViewModel,它继承自ITabViewModel,它有两个属性:HeaderText和HeaderImage。我希望从每个ViewModel设置这些。因此,我尝试使用HeaderTemplate样式,但这不起作用。有人能告诉我怎么才能让它工作吗 <TabControl> <TabControl.Resources> <Style TargetType="TabItem

我目前正在使用TabControl开发一个应用程序,每个选项卡都有一个ViewModel,它继承自
ITabViewModel
,它有两个属性:
HeaderText
HeaderImage
。我希望从每个ViewModel设置这些。因此,我尝试使用
HeaderTemplate
样式,但这不起作用。有人能告诉我怎么才能让它工作吗

<TabControl>
    <TabControl.Resources>
        <Style TargetType="TabItem" BasedOn="{StaticResource {x:Type TabItem}}">
            <Setter Property="HeaderTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <Image Source="{Binding HeaderImage}" Height="20" Margin="5, 0"/>
                            <TextBlock Text="{Binding HeaderText}"/>
                        </StackPanel>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </TabControl.Resources>

    <TabItem DataContext="{Binding ViewModelStart}">

    </TabItem>

    <TabItem DataContext="{Binding ViewModelStartupManager}">

    </TabItem>
</TabControl>

只需在ItemTemplate部分下定义DataTemplate

 <TabControl>
    <TabControl.ItemTemplate>
        <DataTemplate>
             <StackPanel Orientation="Horizontal">

诸如此类的绑定

ItemTemplate是用于格式化ItemsSource中的每个项目以创建标题的模板


我想你至少有两个选择

首先(我假设
ViewModelStart
viewmodelstartmanager
是属性):

XAML,删除
选项卡项的
,并将它们添加到上面的属性中。还将以下属性添加到
TabControl

ItemsSource="{Binding Tabs}"

您需要为
HeaderTemplate
设置
TabItem
Header
属性才能应用:

<TabItem DataContext="{Binding ViewModelStart}" Header="{Binding}">

</TabItem>

<TabItem DataContext="{Binding ViewModelStartupManager}" Header="{Binding}">

</TabItem>

这项工作:

<TabControl>
    <TabControl.Resources>
        <Style TargetType="TabItem" BasedOn="{StaticResource {x:Type TabItem}}">
            <Setter Property="HeaderTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <Image Source="{Binding HeaderImage}" Height="20" Margin="5, 0"/>
                            <TextBlock Text="{Binding HeaderText}"/>
                        </StackPanel>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </TabControl.Resources>

    <TabItem DataContext="{Binding ViewModelStart}" Header="{Binding}">

    </TabItem>

    <TabItem DataContext="{Binding ViewModelStartupManager}" Header="{Binding}">

    </TabItem>
</TabControl>

我本来想做第二个选项,但是除了标题,我如何添加内容?我在每个选项卡中都有很多复杂的元素。我还有一个DockPanel,它在每个选项卡中充当第二个标题,并且具有与标题相同的属性(图像和文本),另外还有一些看起来不错的属性。
<TabItem DataContext="{Binding ViewModelStart}" Header="{Binding}">

</TabItem>

<TabItem DataContext="{Binding ViewModelStartupManager}" Header="{Binding}">

</TabItem>
<TabControl>
    <TabControl.Resources>
        <Style TargetType="TabItem" BasedOn="{StaticResource {x:Type TabItem}}">
            <Setter Property="HeaderTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <Image Source="{Binding HeaderImage}" Height="20" Margin="5, 0"/>
                            <TextBlock Text="{Binding HeaderText}"/>
                        </StackPanel>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </TabControl.Resources>

    <TabItem DataContext="{Binding ViewModelStart}" Header="{Binding}">

    </TabItem>

    <TabItem DataContext="{Binding ViewModelStartupManager}" Header="{Binding}">

    </TabItem>
</TabControl>