此处讨论了将对象列表绑定到DataGrid的基础知识How do I bind a List<CustomObject> to a WPF DataGrid?。
我的设置稍微复杂一些:
我有RowModels
,其中包含该行的元数据以及CellModels
的列表。 CellModels
再次包含一些元数据和Value
属性,该属性显示在dataGrid中。
为了填充我的DataGrid,我确实设置了
ItemsSource="{Binding RowModelList, UpdateSourceTrigger= PropertyChanged}"
并通过
逐列映射列<DataGridTextColumn Binding="{Binding CellModelList[0].Value, UpdateSourceTrigger= PropertyChanged}"/>
<DataGridTextColumn Binding="{Binding CellModelList[1].Value, UpdateSourceTrigger= PropertyChanged}"/>
...
这样我也可以为每列指定ColumnHeader并修改每列的表示。
但是我想在我的DataTrigger
- 样式中使用DataGridCell
来访问我的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>
问题:
我需要根据DataGridCell
中的元数据设置CellModel
的属性。
我确信有一个更优雅的解决方案(比上面显示的解决方案)不需要自定义每一列。我仍然需要能够手动更改单个列(尤其是ColumnHeaders
),这就是我首先手动逐个手动声明DataGridTextColumns的原因。
您对如何正确处理此问题有任何建议吗?
答案 0 :(得分:0)
这是在后续问题中回答的。
我使用的解决方案是为DataGridCell
创建一个附加属性,我在其中存储CellModel并从那里访问属性。
查看代码的链接问题: Structure of WPF DataGrid - change cells depending on value