将自定义对象绑定到 DataGrid

Bind customObject to DataGrid

此处讨论了将对象列表绑定到 DataGrid 的基础知识 How do I bind a List<CustomObject> to a WPF DataGrid?

我的设置稍微复杂一些: 我有 RowModels,其中包含该行的元数据以及 CellModels 的列表。 CellModels 再次包含一些元数据和一个显示在数据网格中的 Value 属性。

为了填充我的 DataGrid,我设置了

ItemsSource="{Binding RowModelList, UpdateSourceTrigger= PropertyChanged}"

并通过

逐一映射列
<DataGridTextColumn Binding="{Binding CellModelList[0].Value, UpdateSourceTrigger= PropertyChanged}"/>
<DataGridTextColumn Binding="{Binding CellModelList[1].Value, UpdateSourceTrigger= PropertyChanged}"/>
...

这样我还可以为每列指定一个 ColumnHeader 并修改每列的显示方式。

但是我还想在我的 DataGridCell 样式中使用 DataTrigger 来访问我的 CellModel 的元数据。

这有效,但是..好吧:

当然我可以为每一列创建一个样式,例如

<Style x:Key="CellStyleColumnZero" TargetType="DataGridCell">
    <Style.Triggers>
        <DataTrigger Binding="{Binding CellModelList[0].Enabled}" Value="False">
            <Setter Property="IsEnabled" Value="False"/>
        </DataTrigger>
    </Style.Triggers>
</Style>

问题:

我需要根据 CellModel 中的元数据设置 DataGridCell 的属性。

我相信有一个更优雅的解决方案(比上面显示的解决方案)不需要自定义每一列。我仍然需要能够手动更改单个列(尤其是 ColumnHeaders),这就是为什么我首先逐个手动声明 DataGridTextColumns 的原因。

您对如何正确处理这个问题有什么建议吗?

这在后续问题中得到了回答。

我使用的解决方案是为 DataGridCell 创建附加的 属性,我在其中存储 CellModel 并从那里访问属性。

查看代码的链接问题: