DataTemplate, похоже, не связывает

Я заполняю ListBox элементами из связанной модели. Во время тестирования у меня было такое:

<ListBox x:Name="SettingsHolder" Margin="5,8,5,5" ItemsSource="{Binding AllSettingItems}" Height="380" DisplayMemberPath="Display"/>

Путем привязки непосредственно к члену объектов item в ItemsSource я смог убедиться, что правильно загружаю список. Фактически, элемент Display - это просто String.Format элементов, которые я хотел бы отобразить с помощью DataTemplate. Все отлично работает. Не должно быть ничего сложного в том, чтобы определить шаблон, верно?

Итак, я определил свой шаблон данных.

    <Window.Resources>
    <DataTemplate x:Key="AllSettingsItemTemplate">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="140*"/>
                <ColumnDefinition Width="16"/>
                <ColumnDefinition Width="16"/>
                <ColumnDefinition Width="16"/>
            </Grid.ColumnDefinitions>
            <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" DataContext="{Binding Key}"/>
            <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" Grid.Column="1" DataContext="{Binding DevDisplay}"/>
            <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" Grid.Column="2" DataContext="{Binding CertDisplay}"/>
            <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" Grid.Column="3" DataContext="{Binding ProdDisplay}"/>
        </Grid>
    </DataTemplate>
</Window.Resources>

Я удалил DisplayMemberPath.

Я заменил:

ItemTemplate="{DynamicResource AllSettingsItemTemplate}"

И теперь никакие значения не отображаются. По появлению полос прокрутки и выбираемых элементов я могу сказать, что значения AllSettingsItem привязываются, потому что я получаю правильный НОМЕР выбираемого элемента, но ничего не отображается. Это как если бы привязка к элементам элемента (Key, DevDisplay и т. Д.) Просто не происходит или, если это происходит, она не отображается.

Я пробовал Path = Key в привязке шаблона данных. Это был выстрел в темноте, так что. . .

В чем секрет? Как вообще отладить что-то подобное?

(Я использую Blend и VS2013).


person urbadave    schedule 10.06.2015    source источник


Ответы (1)


Вы ни к чему не привязываете Text из TextBlock. Попробуйте что-то вроде этого:

<TextBlock HorizontalAlignment="Left" 
           TextWrapping="Wrap" 
           VerticalAlignment="Top" 
           Grid.Column="1" 
           Text="{Binding DevDisplay}" />

К вашему сведению, DataTemplate DataContext автоматически устанавливается на элемент, к которому он привязан.

person Kcvin    schedule 10.06.2015