2011-01-06 1 views
2

Der folgende Code funktioniert, aber ich verstehe nicht genau warum. Ich bin gerade durch Zufall zu dieser Lösung gekommen.Warum funktioniert das? (Binding in einer Panorama-Vorlage, 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> 

Was ich erreichen wollte einen Header für alle PanoramaItems zu erstellen und den Kopftext in jedem PanoramaItem angeben. z.B .: <controls:PanoramaItem Header="item one">

In der Vorlage hat die Bindung ohne Parameter der Job: Text="{Binding}"

Warum ist das Arbeits? Die Bindung muss einige Standardwerte verwenden (Standardpfad oder so) - was sind diese Standardwerte? Was wäre die nicht gekürzte Version der Bindung?

Antwort

3

Sie haben eine Zeichenfolge als Objekt für den Inhalt Header zugewiesen.

Sie haben auch eine DataTemplate angegeben, um das Objekt anzuzeigen, das der Header-Eigenschaft zugewiesen ist. In diesem Fall ist dieses Objekt, wie oben erwähnt, einfach eine Zeichenkette. Diese Zeichenfolge wird daher die DataContext der ContentPresenter letztlich verwendet, um den Header zu präsentieren.

Wenn Sie {Binding} ohne Pfad verwenden, gibt die Bindung das Quellobjekt zurück. Ohne Angabe eines Quellobjekts ist das Standardquellobjekt das aktuelle DataContext für das Element, für das die Bindung festgelegt ist. Daher ist das Ergebnis von {Binding} in diesem Fall die Zeichenfolge, die Sie der Header-Eigenschaft zugewiesen haben.

Es gibt keine "nicht verkürzte Version" für diese Bindung, sicherlich keine, die einen Sinn ergibt.