我正在尝试使用绑定到ObservableCollection
的XAML中的DataGrid。使用绑定到ObservableCollection
中每个项目的各个列的DataGridTextColumns,我可以轻松地显示简单的文本,但我也希望在网格中显示图像。因此,我开始使用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中的逻辑,所以任何建议或建议都会受到赞赏。
TextBlock DataContext已经设置为集合中的项目,因此您可以直接绑定到项目的属性。
<TextBlock Text="{Binding Number}"/>