我有一個數據網格,我綁定了一個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的也。我的球場發生了什麼?它消失了嗎?任何人都可以讓我知道如何得到它或如何我可以實現這個問題的解決方案
在此先感謝。