2013-03-18 104 views
2

我有一個Pivot Control和三個PivotItems加入Blend。每個PivotItemViewModel,因爲它是DataContext。每個ViewModel都有一個字符串屬性Title。我想編輯Header Template,創建一個TextBlock並將它的Text屬性綁定到Title,但由於某些原因它不起作用。我確信這是因爲Header TemplateDataContext爲空,但我認爲它會從特定的PivotItem繼承。這是標題模板的xaml代碼。綁定樞軸頁眉模板

<DataTemplate x:Key="HeaderTemplate"> 
     <Grid Height="47" Width="354"> 
      <TextBlock Margin="8,0,64,8" TextWrapping="Wrap" Text="{Binding Title}" d:LayoutOverrides="Width" FontSize="24" Foreground="Red"/> 
     </Grid> 
    </DataTemplate> 



    <controls:Pivot TitleTemplate="{StaticResource TitleTemplate}" HeaderTemplate="{StaticResource HeaderTemplate}"> 
     <!--Pivot item one--> 
     <controls:PivotItem DataContext="{Binding Home, Mode=OneWay}"> 
      <Grid> 
       <ListBox x:Name="listBox" ItemsPanel="{StaticResource HomeItemsPanel}" ItemTemplate="{StaticResource HomeItemTemplate}" ItemsSource="{Binding Tiles}"> 
        <i:Interaction.Triggers> 
         <i:EventTrigger EventName="SelectionChanged"> 
          <GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding OnSelectionChanged}" CommandParameter="{Binding SelectedIndex, ElementName=listBox}"/> 
         </i:EventTrigger> 
        </i:Interaction.Triggers> 
       </ListBox> 
      </Grid> 
     </controls:PivotItem> 
     <controls:PivotItem Margin="0,8,0,1"> 
      <Grid/> 
     </controls:PivotItem> 

     <!--Pivot item two--> 
     <controls:PivotItem DataContext="{Binding More, Mode=OneWay}"> 
      <Grid/> 
     </controls:PivotItem> 
    </controls:Pivot> 

我想創建一個更復雜的Header Template,但是,現在我正在測試,如果我可以綁定它的東西不僅僅是一個TextBlock更出發之前。我知道我可以使用ListViewModels作爲PivotControl.ItemSource,但是之後我將不得不使用DataTemplateSelector等等,我不想那樣做。

所以我想我的問題是,我怎麼能使HeaderTemplate繼承根據PivotItem的DataContext? 謝謝。

+1

您是否嘗試過使用元素綁定? – 2013-03-18 18:34:28

+0

我不確定你的意思。 – Cosmin 2013-03-18 19:07:49

回答

2

這是行不通的。你應該寫HeaderTemplate中通過以下方式:

<controls:Pivot.HeaderTemplate> 
    <DataTemplate> 
     <TextBlock Text="{Binding}" /> 
    </DataTemplate> 
</controls:Pivot.HeaderTemplate> 

文本塊將收到來自PivotItem的Header屬性的綁定。對於每個PivotItem,您綁定其頭:

<controls:PivotItem Header="{Binding Title}"> 
    <Grid/> 
</controls:PivotItem> 

唯一的問題仍然是每個樞軸的項目綁定到其自身的數據上下文。您可以使用以下代碼爲每個項目手動執行此操作:

<controls:PivotItem DataContext="{Binding Item1}" Header="{Binding Title}"> 
    <Grid/> 
</controls:PivotItem> 
<controls:PivotItem DataContext="{Binding Item2}" Header="{Binding Title}"> 
    <Grid/> 
</controls:PivotItem> 
+2

我知道你在說什麼,但想象一下,在標題模板中有一個圖像和一個文本框,那麼我就無法將它們都綁定在一起。無論如何,最後我使用了Pivot Control的ItemsSource屬性,一個用於我的Pivot Items ViewModel的基本ViewModel,公開HeaderTemplate的所有公共屬性,並創建了DataTemplateSelector,以便在我的PivotItems的不同ItemTemplates之間進行選擇。花了一段時間才明白,但代碼看起來很乾淨漂亮。 – Cosmin 2013-03-19 20:33:58