2

Pivot Controlと 3 つをPivotItems追加しましたBlend。それぞれPivotItemViewModelそのままがありDataContextます。それぞれViewModelに文字列プロパティがありますTitleHeader Templateを編集してを作成し、そのプロパティを にTextBlockバインドしたいのですが、何らかの理由で機能しません。のがnull だからだと思いますが、特定の から継承されると思いました。これはヘッダー テンプレートのコードです。TextTitleDataContextHeader TemplatePivotItemxaml

    <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 以外のものに進む前に、それをバインドできるかどうかをテストしています。ListにofViewModelsを使用できることはわかっていますがPivotControl.ItemSource、その場合は a などを使用する必要がDataTemplateSelectorあり、それは望ましくありません。

だから私の質問はこれだと思います.HeaderTemplateがそれに応じたDataContextを継承するようにするにはどうすればよいPivotItemですか? ありがとうございました。

4

1 に答える 1

2

それはうまくいきません。次のように HeaderTemplate を記述する必要があります。

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

Textblock は、Pivo​​tItem の 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>
于 2013-03-19T18:14:06.380 に答える