首页 > 解决方案 > wpf - 将自动生成的列数据网格绑定到值的属性

问题描述

MyDataTable包含每列的复合类型的值,目标是用于显示属性和按属性设置Value样式State

public class PairData
{
    public string Value { get; set; }
    public int State { get; set; }
}

可以像菜单一样配置数据网格:

        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Path=Column1.Value}">
                <DataGridTextColumn.ElementStyle>
                    <Style TargetType="{x:Type TextBlock}">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Path=Column1.State}" Value="1">
                                <Setter Property="Background" Value="Red"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </DataGridTextColumn.ElementStyle>
            </DataGridTextColumn>
        </DataGrid.Columns>

但我想使用 dinmicly 生成列AutoGenerateColumns="True"

有没有办法绑定“值”属性的所有列?也许是这样的:

      <DataGrid  ItemsSource="{Binding Path=Source}" >
        <DataGrid.CellStyle>
            <Style TargetType="DataGridCell">
                <Setter Property="Foreground" Value="Black" />
                <Setter Property="TextBlock.Text" Value="{Binding Value}"/>
            </Style>
        </DataGrid.CellStyle>
    </DataGrid>

我收到一个错误:

System.Windows.Data Error: 40 : BindingExpression path error: 'Value' property not found on 'object' ''DataRowView' (HashCode=15375790)'. BindingExpression:Path=Value; DataItem='DataRowView' (HashCode=15375790); target element is 'DataGridCell' (Name=''); target property is 'Text' (type 'String')

标签: wpfdata-binding

解决方案


您应该将 替换为DataTable实现IEnumerable<PairData>(例如 a List<PairData>)。

您不能真正存储自定义对象PairData,例如 a DataRowof a DataTable

将对象绑定到数据网格单元格 - 条件单元格样式


推荐阅读