2017-04-01 45 views
0

我目前正在研究TabControl的应用程序,并且每个选项卡都有一个从ITabViewModel继承的ViewModel,它有两个属性:HeaderTextHeaderImage。我想从每个ViewModel设置这些。因此,我试图使用HeaderTemplate风格,但这不起作用。任何人都可以告诉我如何才能使这个工作?C#WPF MVVM TabItem 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> 

回答

0

只要定义下的ItemTemplate部分

<TabControl> 
    <TabControl.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
与你绑定

的ItemTemplate

等等的DataTemplate是用于每个项目中的ItemsSource格式创建的标题模板

0

我认为至少有两个选项您。

第一(我认为ViewModelStartViewModelStartupManager是属性):

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

第二,使用ItemsSource并在视图模型收集的一些定义你的标签。

视图模型:

public ObservableCollection<ITabViewModel> Tabs{ get; set; } 

XAML,删除您TabItem's并在上面添加财产。也是继属性添加到TabControl

ItemsSource="{Binding Tabs}" 
+0

我想最初做第二个选项,但是除了头部之外,我会如何添加内容?每个标签中都有很多复杂的元素。我还有一个DockPanel,它在每个选项卡中充当辅助标题,并具有与标题(图像和文本)相同的属性,以及其他一些看起来不错的属性。 – Aleksbgbg

0

您需要设置TabItemHeader属性为HeaderTemplate得到应用:

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