我有一个绑定 DataTable 的数据网格。我不知道数据表中有哪些行或列,所以我将数据网格的 AutogenerateColumns 属性设置为 true。我唯一确定的是,数据表中的每个单元格都是 Field 类型,并且 Field 类有一个名为 Type 的枚举属性。
<DataGrid
x:Name="dg"
AutoGenerateColumns="True"
ItemsSource="{Binding Path=Fields}"
AutoGeneratingColumn="dg_AutoGeneratingColumn">
</DataGrid>
我想要做的是强制所有自动生成的列都是 DataTemplateColumns,它们的 CellTemplateSelector 属性设置为 FieldCellTemplateSelector 对象。为此,我将以下代码添加到 AutoGeneratingColumn 事件中:
private void dg_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
//cancel the auto generated column
e.Cancel = true;
//create a new template column with the CellTemplateSelector property set
DataGridTemplateColumn dgtc = new DataGridTemplateColumn();
dgtc.CellTemplateSelector = new FieldCellTemplateSelector();
dgtc.IsReadOnly = true;
dgtc.Header = e.Column.Header;
//add column to data grid
DataGrid dg = sender as DataGrid;
dg.Columns.Add(dgtc);
}
FieldCellTemplateSelector 类的代码如下:
public class FieldCellTemplateSelector : DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
return base.SelectTemplate(item, container);
}
}
在 SelectTemplate 方法中,我需要获取单元格中包含的 Field 对象,并根据该字段的 Type 属性返回相关的数据模板。问题是传递的 item 参数不是 Field 类型,而是 DataRowView 类型。
我可以通过执行以下操作来获取 DataGridCell 对象:
ContentPresenter presenter = container as ContentPresenter;
DataGridCell cell = presenter.Parent as DataGridCell;
但是,单元格的数据上下文也是 DataRowView 类型。我的领域发生了什么事?它消失了吗?谁能让我知道如何解决这个问题或我如何解决这个问题
提前致谢。