Почему это работает?(Привязка в Панораме-Шаблоне, Windows Phone 7) - PullRequest
2 голосов
/ 07 января 2011

Следующий код работает, но я точно не понимаю, почему. Я только что пришел к этому решению по счастливой случайности.

<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>

Чего я хотел добиться, так это создать один шаблон HeaderTemplate для всех PanoramaItems и указать текст заголовка в каждом PanoramaItem. например: <controls:PanoramaItem Header="item one">

В шаблоне привязка без параметров выполняет свою работу: Text="{Binding}"

Почему это работает? Привязка должна использовать некоторые значения по умолчанию (путь по умолчанию или около того) - каковы эти значения по умолчанию? Какой будет не сокращенная версия привязки?

1 Ответ

3 голосов
/ 07 января 2011

Вы назначили строку в качестве объекта, который будет использоваться для содержимого Header.

Вы также указали DataTemplate для представления объекта, назначенного свойству Header. В этом случае, как указано выше, этот объект является просто строкой. Таким образом, эта строка становится DataContext из ContentPresenter, в конечном итоге используемой для представления заголовка.

Когда вы используете {Binding} без какого-либо Path, привязка вернет исходный объект. Без указания какого-либо исходного объекта исходным объектом по умолчанию является текущий DataContext для элемента, для которого установлена ​​привязка. Следовательно, результатом {Binding} в этом случае является строка, которую вы присвоили свойству Header.

Для этой привязки не существует «сокращенной версии», и уж точно не имеет смысла.

...