2011-01-06 15 views
2

次のコードは機能しますが、その理由はわかりません。私はちょうどそのようなソリューションをflukeで手に入れました。私が達成したかった何これはなぜ機能しますか? (Panorama-Template、Windows Phone 7でのバインド)

<controls:Panorama x:Name="PanoramaMama" Title="my header"> 
    <controls:Panorama.TitleTemplate> 
     <DataTemplate> 
      <TextBlock Foreground="Red" Text="{Binding}"/> 
     </DataTemplate> 
    </controls:Panorama.TitleTemplate> 
    <controls:Panorama.HeaderTemplate> 
     <DataTemplate> 
      <TextBlock Foreground="Blue" Text="{Binding}" /> 
     </DataTemplate> 
    </controls:Panorama.HeaderTemplate> 

    <!--Panorama item one--> 
    <controls:PanoramaItem Header="item one"> 

     <Grid/> 
    </controls:PanoramaItem> 

    <!--Panorama item two--> 
    <controls:PanoramaItem Header="item two"> 
     <Grid/> 
    </controls:PanoramaItem> 
</controls:Panorama> 

はすべてPanoramaItemsのための1つのHeaderTemplateを作成し、各PanoramaItemでヘッダーテキストを指定することでした。例えば:テンプレートで<controls:PanoramaItem Header="item one">

、パラメータなしで結合したジョブ:Text="{Binding}"

なぜこの作業はありますか? バインディングではデフォルト値(デフォルトのパスなど)を使用する必要があります。バインディングの簡略化されていないバージョンは何ですか?

答えて

3

Headerコンテンツに使用するオブジェクトとして文字列を割り当てました。

また、Headerプロパティに割り当てられたオブジェクトを表すためにDataTemplateを指定しました。この場合、オブジェクトは単なる文字列であるという上記のように。したがって、この文字列はContentPresenterDataContextになり、最終的にヘッダーを表示します。

パスなしで{バインディング}を使用すると、バインディングはソースオブジェクトを返します。ソースオブジェクトを指定しない場合、デフォルトのソースオブジェクトは、バインディングが設定されている要素の現在のDataContextです。したがって、この場合の{Binding}の結果は、Headerプロパティに割り当てた文字列です。

このバインディングには「短縮されていないバージョン」はありませんが、意味をなさないものはありません。

関連する問題