绑定枢轴标题模板

时间:2013-03-18 15:22:02

标签: data-binding pivot windows-phone mvvm-light

我在Pivot Control中添加了PivotItems和三个Blend。每个PivotItem都有ViewModel,因为它是DataContext。每个ViewModel都有一个字符串属性Title。我想编辑Header Template,创建一个TextBlock并将其Text属性绑定到Title,但由于某种原因它无效。我确定这是因为DataContext的{​​{1}}为空,但我认为它将从特定的Header Template继承。这是标题模板的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> 但是现在我正在测试我是否可以绑定它,然后再继续处理一些不仅仅是TextBlock。我知道我可以使用Header Template List ViewModels,但我必须使用PivotControl.ItemSource等等,我不希望这样

所以我想我的问题是这样,我如何让HeaderTemplate继承相应DataTemplateSelector的DataContext? 谢谢。

1 个答案:

答案 0 :(得分:2)

那不行。您应该按照以下方式编写HeaderTemplate:

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

Textblock将从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>