【发布时间】:2021-12-27 23:14:19
【问题描述】:
我有一个数据模型,可以将其视为具有动态列和行的表。
模型公开了一个定义当前存在的列的集合。 每列本身就是一个对象(模型)。 该模型还公开了一个包含行的集合。此外,每一行都是代表该行的模型。
每一行都公开一个包含列值的集合。每列“值”也是一个模型。
MyModel
- Columns (list of MyModelColumn)
- Rows (list of MyModelRow)
MyModelColumn
- Header (string)
- ...
MyModelRow
- Values (list of MyModelCell)
- ...
MyModelCell
- CalculatedValue
- DisplayValue
- Color
- ...
我想要实现的是:
- 一个动态创建列的
DataGrid,对应于MyModel.Columns -
DataGrid中的每个单元格都必须能够绑定到相应MyModelCell的属性。 - 每个
DataGrid列都是一个DataGridTemplateColumn。
这似乎不太难,但我尝试了几种不同的方法,仍然无法完成。
我设法动态地创建了DataGrid 列(来自代码隐藏)。
DataGrid 自身的行为使得DataGridTemplateColumn 中的每个单元格都具有
其DataContext 设置为属于整行的“数据项”。在这种情况下,每个DataGrid 单元格的DataContext 是一个MyModelRow 实例。
DataGrid 单元的DataTemplate 知道MyModelRow,并且可以直接绑定到该类的属性,但这不是我想要的。我想绑定到属于行/列的相应MyModelCell。
从 CellTemplate(和 CellEditingTemplate)中,您永远无法确定单元格位于哪一列,因此您不知道
您必须访问哪个MyModelCell(来自MyModelRow.Values)才能读取MyModelCell 的属性。
主要问题是:如何将DataGrid中的每个单元格连接到它所属的MyModelCell?
我说的数据模型类是viewmodels,问题主要是UI相关的。因此,使用代码隐藏很好,甚至是不可避免的。
【问题讨论】:
标签: c# wpf xaml data-binding datagrid