【发布时间】:2015-09-02 10:27:33
【问题描述】:
此处How do I bind a List<CustomObject> to a WPF DataGrid? 讨论了将对象列表绑定到 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并修改每一列的表示。
但是,我还想在我的DataGridCell 样式中使用DataTrigger 来访问我的 CellModels 的元数据。
这行得通,但是.. 很好:
当然,我可以为每一列创建一个样式,例如
<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 的原因。
您对如何正确处理这个问题有什么建议吗?
【问题讨论】:
-
对这个优雅的解决方案使用 C# 反射。它可以列出你
CellModel的元数据 -
我认为您误解了这个问题。元数据是指
CellModel中的属性(如启用、值等)。问题是在当前解决方案中,CellModel没有绑定到 DataGridCell(只有Value属性是)。因此我无法通过DataGridCell-Style 中的数据绑定访问CellModel。 -
为什么不能直接将 Value 转换为 CellModel ?
标签: c# wpf data-binding datagrid