我在理解 WPF 中数据绑定的基础知识时遇到问题。我有一个通用的 DataGrid(设置了 AutoGenerateColumns),它绑定到一个 DataTable,其列名在每次加载时都不同。当 dataTable 包含布尔类型的列时,我想呈现一个包含表示真假的自定义图像的列。
为此,我在页面上为单元格模板声明了一个 StaticResource,并且我有捕获 AutoGenerateColumn 事件并使用此模板的 c# 代码:
<DataTemplate x:Key="CheckmarkColumnTemplate">
<Image x:Name="CheckmarkImage" Source="..\..\images\check.png" Height="16" Width="16" />
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Value}" Value="False">
<Setter TargetName="CheckmarkImage" Property="Source" Value="..\..\images\nocheck.png" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
C#代码:
private void dgData_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (e.PropertyType == typeof(bool))
{
DataGridTemplateColumn col = new DataGridTemplateColumn();
Binding binding = new Binding(e.PropertyName);
col.CellTemplate = (this.Resources["CheckmarkColumnTemplate"] as DataTemplate);
col.Header = e.PropertyName;
e.Column = col;
}
}
这主要是有效的,除了我的 DataTrigger Binding 属性搞砸了。它从不检测列的值何时为“false”,因此它从不显示 nocheck.png 图像。我不知道如何编写 Binding 属性,以便引用列的数据绑定值(请记住,列名每次都不同,所以我不能在绑定的 Path 部分硬编码列名) .
谁能告诉我 Binding 属性应该是什么样子,以便它只获取列的值?