我有一个数据网格,我绑定了一个DataTable。我不知道数据表中的行或列是什么,所以我将数据网格的AutogenerateColumns属性设置为true。我唯一确切知道的是,数据表中的每个单元格都是Field类型,而Field类有一个名为Type的枚举属性。强制DataTemplateCell与WPF DataGrid中的CellTemplateSelector自动生成的列
<DataGrid
x:Name="dg"
AutoGenerateColumns="True"
ItemsSource="{Binding Path=Fields}"
AutoGeneratingColumn="dg_AutoGeneratingColumn">
</DataGrid>
我想要做的是迫使所有自动生成列是因为他们CellTemplateSelector属性设置为FieldCellTemaplateSelector对象DataTemplateColumns。要做到这一点,我添加以下代码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的也。我的球场发生了什么?它消失了吗?任何人都可以让我知道如何得到它或如何我可以实现这个问题的解决方案
在此先感谢。