Привязка заголовка панорамы

Я делаю приложение WP7, используя элемент управления Panorama, и у меня возникла проблема с привязкой к свойству Panorama Title. Можно ли связать это значение из объекта ViewModel?

Привязка в файле xaml:

<controls:Panorama x:Name="prmPanorama" Title="{Binding Voyage.Title}">

Свойство Voyage ViewModel — это объект Model (со свойством Title внутри) с событием OnNotifyPropertyChanged, запускаемым каждый раз, когда оно изменяется:

private Voyage _voyage;
public Voyage Voyage
{
    get { return _voyage; }
    set
    {
        if (_voyage != value)
        {
            _voyage = value;
            OnNotifyPropertyChanged("Voyage");
        }
    }
}

Когда я привязываю одно и то же свойство к другому элементу управления, например. TextBlock, привязка работает нормально:

<TextBlock Text="{Binding Voyage.Title}" />

Текст, показанный в этом текстовом блоке, как и должен быть, но в то же время заголовок панорамы не привязан правильно - он свернут.

Кто-нибудь пробовал делать такую ​​привязку? Я понятия не имею, почему это не работает.


person MarcinJuraszek    schedule 13.02.2012    source источник


Ответы (1)


    <DataTemplate x:Key="TitleDataTemplate"> 
       <TextBlock Text="{Binding}" /> 
    </DataTemplate>
    ... 
    <controls:Panorama Title="{Binding Voyage.Title}" 
                       TitleTemplate="{StaticResource TitleDataTemplate}">

Шаблон элемента управления панорамой использует презентатор контента для отображения любого значения, которое имеет его свойство title, вроде кнопки. При настройке свойства шаблона заголовка вы косвенно устанавливаете шаблон контента презентатора контента.

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

Для получения дополнительной информации перейдите по этой ссылке

person Edward    schedule 13.02.2012
comment
Не работает. Заголовок панорамы по-прежнему свернут, и над заголовками PanoramaItems не отображается текст. Возможно ли, что когда View инициализируется и это свойство Voyage не установлено (оно загружается из sql ce в результате извлечения некоторых данных queryString во время события OnNavigatedTo), весь слой заголовка панорамы удаляется из пользовательского интерфейса, и он не может быть привязан позже? - person MarcinJuraszek; 14.02.2012
comment
Это не должно... Я только что попробовал это прямо сейчас, и у меня не было проблем с привязкой строки к заголовку панорамы. Возможно, вы можете показать свою модель представления, а также когда модель представления создается? - person Edward; 14.02.2012
comment
ViewModel создается как поле в классе View, а затем назначается в DataContext в contrustor сразу после InitializeComponents(). Я скопировал часть кода из View и ViewModel здесь: pastebin.com/FNR9P6H2 - person MarcinJuraszek; 14.02.2012