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