Я пытаюсь работать с сеткой данных в 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, поэтому любые советы или предложения будут оценены.