Привязка к datatemplate в datagrid

Я пытаюсь работать с DataGrid в XAML, который привязан к ObservableCollection. У меня не было проблем с отображением простого текста с помощью DataGridTextColumns, которые привязаны к отдельным столбцам каждого элемента в ObservableCollection, но я также хочу, чтобы изображения отображались в сетке. Таким образом, я начал работать с DataGridTemplateColumn, но, похоже, я не могу правильно понять логику привязки. Я упростил его до простого отображения текста с его помощью, прежде чем я перейду к вставке изображения.

Ниже представлена ​​упрощенная версия моего кода:

<DataGrid x:Name="DataGrid" Width="Auto" MinWidth="600" AutoGenerateColumns="False"
            SelectionMode="Single"
            ItemsSource="{Binding Collection, Mode=OneWay}" CanUserReorderColumns="True" CanUserSortColumns="True">
    <DataGrid.Columns>
        <DataGridTextColumn x:Name="ID" Header="ID" Binding="{Binding ID, Mode=OneWay}"/>
        <DataGridTemplateColumn x:Name="Number" Header="Number">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding DataContext.Number}" DataContext="{Binding Collection, RelativeSource={RelativeSource FindAncestor, AncestorType=DataGrid}}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

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

System.Windows.Data Error: 40 : BindingExpression path error: 'Collection' property not found on 'object' ''DataGrid' (Name='DataGrid')'. BindingExpression:Path=Collection; DataItem='DataGrid' (Name='DataGrid'); target element is 'TextBlock' (Name=''); target property is 'DataContext' (type 'Object')

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

<TextBlock Text="{Binding Number}" DataContext="{Binding DataContext.Collection, RelativeSource={RelativeSource FindAncestor, AncestorType=DataGrid}}"/>

Я просто хочу выяснить, как отобразить что-то столь же простое, как текст в сетке, чтобы я мог перейти к использованию этой логики для других вещей. Кажется, я не могу найти никакой информации, которая решает мою конкретную проблему.

Я уверен, что это что-то простое. Я просто не понимаю логики XAML, поэтому любые советы или предложения будут оценены.

0
0
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

<TextBlock Text="{Binding Number}"/>

Другие вопросы по теме