我在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?
谢谢。
答案 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>