Шаблон заголовка сводки WP7 DataContext Binding не работает - PullRequest
1 голос
/ 24 марта 2011

У меня есть шаблон заголовка сводки, так что на странице сводки есть заголовок и подзаголовок.Я хочу установить оба с помощью кода.

Я строю XAML в Blend и без привязки кода, он отображается так, что часть работает.

Однако моя привязка не работает.Он либо не будет создаваться, потому что объект не имеет DataContext, либо объект не существует в текущем контексте или выполняет сборку, но не будет отображаться.Когда он не отображается, я предполагаю, что связываюсь с неправильным объектом XAML. Каждый объект назван только так, чтобы я мог найти нужный объект для привязки.

Содержащий класс для связанного кода Title и Subtitle выглядит следующим образом:

public class PivotTitle
{
    public string Title = "";
    public string Subtitle = "";
}

Мой вопрос: как правильно связать TitleTemplate, чтобы свойства TextBlocks могли бытьустановить в коде?

Вот XAML

       <controls:Pivot.TitleTemplate >
            <DataTemplate x:Name="PivotTitleTemplateDataTemplate"  >
                <StackPanel x:Name="MyPivotTitle" DataContext="{Binding}" >
                    <TextBlock x:Name="Title"
                        Text="{Binding Title}"
                        FontSize="20"
                        TextWrapping="Wrap"/>
                    <TextBlock x:Name="Subtitle"
                        Text="{Binding Subtitle}"
                        Foreground="Gray"
                        TextWrapping="Wrap"/>
                </StackPanel>
            </DataTemplate>
        </controls:Pivot.TitleTemplate>

Название и субтитры зависят от страницы, с которой вы переходили.Код выглядит следующим образом:

// определен в верхней части класса страницы public PivotTitle _PivotTitle = new PivotTitle ();

    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);


        string queryStringDeploymentName = "";

        this.NavigationContext.QueryString.ContainsKey("DeploymentName"))

        _PivotTitle.Title = SelectedDeployment.DeploymentName;
        _PivotTitle.Subtitle = App.ViewModel.AppSettings.UpdatedText;
       MyPivotTitle.DataContext = _PivotTitle;
     }

Этот конкретный пример не будет создан с этой ошибкой:имя «MyPivotTitle» не существует в текущем контексте.Привязка в окне списка сводной страницы работает правильно.

Я считаю, что мой код и общий XAML верны.Я думаю, что связывание DataContext неправильно.

Спасибо за любую помощь.

1 Ответ

2 голосов
/ 24 марта 2011

В вашем примере MyPivotTitle является элементом в DataTemplate, поэтому к нему нельзя получить доступ непосредственно из вашего кода, поэтому ошибка. Если вам нужен доступ к элементу управления внутри шаблона элемента управления (например, Pivot или ListBox`), то вам может пригодиться эта статья с WIndowsPhoneGeek.com.

Однако, похоже, что вы могли бы сделать это без какого-либо "взлома". Это заголовок и подзаголовок только для одного элемента сводки, или он будет на всех них? Какие еще данные, если таковые имеются, вы привязываете к элементу (ам) сводки?

...