【发布时间】:2013-03-18 15:22:01
【问题描述】:
我在Blend 中添加了一个Pivot Control 和三个PivotItems。每个PivotItem 都有一个ViewModel,因为它是DataContext。每个ViewModel 都有一个字符串属性Title。我想编辑Header Template,创建一个TextBlock 并将它的Text 属性绑定到Title,但由于某种原因它不起作用。我确定这是因为Header Template 的DataContext 为null,但我认为它会从特定的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 的东西。我知道我可以将ViewModels 中的List 用于PivotControl.ItemSource,但是我必须使用DataTemplateSelector 等等,我不希望这样。
所以我想我的问题是,如何让 HeaderTemplate 继承 PivotItem 的 DataContext?
谢谢。
【问题讨论】:
-
你试过使用元素绑定吗?
-
我不确定你的意思。
标签: data-binding pivot windows-phone mvvm-light