绑定到DataGrid中的DataTemplate

问题描述 投票:0回答:1

我正在尝试使用绑定到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中的逻辑,所以任何建议或建议都会受到赞赏。

wpf xaml data-binding datatemplate
1个回答
0
投票

TextBlock DataContext已经设置为集合中的项目,因此您可以直接绑定到项目的属性。

<TextBlock Text="{Binding Number}"/>
© www.soinside.com 2019 - 2024. All rights reserved.