Привязка данных WPF - шаблон данных не получает значения - PullRequest
0 голосов
/ 02 декабря 2009

У меня есть следующий шаблон данных:

<DataTemplate DataType="{x:Type Client:WorkItem}">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="200" />
        </Grid.ColumnDefinitions>
        <Label Name="lblIDText" Margin="2">WI ID:</Label>
        <Label Name="lblID" Margin="2" Grid.Column="1" 
               Target="{Binding Id}"></Label>

        <Label Name="lblTitleText" Grid.Row="1" Margin="2">WI Title:</Label>
        <Label Name="lblTitle" Margin="2" Grid.Row="2" Grid.ColumnSpan="2" 
               Target="{Binding Title}"></Label>

    </Grid>
</DataTemplate>

в моем разделе <Window.Resources>. Он предназначен для отображения идентификатора и заголовка объекта WorkItem (из пространства имен Microsoft.TeamFoundation.WorkItemTracking.Client.)

Я пытаюсь поместить это в TabItem в TabControl, и он показывает только статический текст. (Идентификатор и заголовок WorkItem не отображаются, но статический текст в моем шаблоне отображается.)

Очевидно, что шаблон запускается, но привязка не работает, и я не могу понять, почему.

Вот мой C #, который его называет:

    private void PickWorkItem_Click(object sender, RoutedEventArgs e)
    {
        int Id = int.Parse(((Button) e.OriginalSource).Tag.ToString());

        _mediator.PickedWorkItem = GetWorkItemInQueryResultListByID(Id);
        tabAddLinks.DataContext = _mediator.PickedWorkItem;
        tabAddLinks.Content = _mediator.PickedWorkItem;

    }        

Я попробовал его с DataContext и он работает так же. Когда я отлаживаю, значение для _mediator.PickedWorkItem установлено правильно (Id и Title оба в порядке).

Буду признателен за любые идеи, как это исправить.

Ответы [ 3 ]

2 голосов
/ 02 декабря 2009

Вы связываете Label.Target. Целью является маркируемый элемент UIE. Вам необходимо связать Label.Content или изменить его на TextBlock и связать TextBlock.Text.

(Полагаю, вы пытались связать несуществующее свойство Label.Text, а Intellisense старательно выбрал для вас Target ...!)

2 голосов
/ 02 декабря 2009

Вы связываете свойство Label Target, когда вы действительно хотите связать это свойство Content:

<Label Content="{Binding Id}"/>

Кроме того, рассмотрите возможность использования TextBlock вместо Label, если вам не нужны дополнительные функции, предоставляемые Label:

<TextBlock Text="{Binding Id}"/>
1 голос
/ 02 декабря 2009

Я довольно новичок в WPF, поэтому извините, если я не в базе, но вам не нужно устанавливать свойство Content метки, а не Target?

...