2017-04-01 16 views
0

私は現在、TabControlのアプリケーションで作業しています。すべてのタブにはITabViewModelを継承するViewModelがあります。HeaderTextHeaderImageという2つのプロパティがあります。私はこれらをそれぞれの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には、ヘッダーを作成するためのItemsSourceの各項目をフォーマットするために使用されるテンプレートですItemTemplateにセクション

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

下のDataTemplateを定義し、その上、あなたのバインディングを持ちます

0

少なくとも2つのオプションがあります君は。

最初(私はViewModelStartViewModelStartupManagerがプロパティであると仮定):

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

ItemsSourceを使用して、ビューモデルでは、いくつかのコレクションにあなたのタブを定義します。

のViewModel:

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

XAML、あなたのTabItem'sを削除し、上記のプロパティに追加します。またTabControlに次の属性を追加します。

ItemsSource="{Binding Tabs}" 
+0

私がしたかったです最初は2番目のオプションを実行しますが、ヘッダーのほかにコンテンツを追加するにはどうすればよいですか?各タブには複雑な要素がたくさんあります。また、各タブの2次ヘッダーとして機能するDockPanelもあり、ヘッダー(画像とテキスト)と同じプロパティーと、さらに見栄えの良いいくつかのプロパティーを持っています。 – Aleksbgbg

0

あなたが適用されますするHeaderTemplateためTabItemHeaderプロパティを設定する必要があります。

<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> 
関連する問題