这让我疯了.我在代码中创建一个DataGrid,然后将其绑定到数据表.这是动态的,每次创建网格时行和列都会不同.
基本上我遍历我的数据表并为每列创建DataGrid列,如下所示:
private static void CreateDataGridColumns(DataGrid datagrid, Document doc) { if (doc == null) return; //return datagrid.Columns.Clear(); foreach (var item in doc.Keys) { var column = new DataGridTemplateColumn { Header = item, CellTemplateSelector = new CustomRowDataTemplateSelector(), }; datagrid.Columns.Add(column); } }
正如您所看到的,我正在使用自定义数据模板选择器,因此我可以根据其内容以不同方式呈现单元格.
这是模板选择器
public class CustomRowDataTemplateSelector : DataTemplateSelector { public override DataTemplate SelectTemplate(object item, DependencyObject container) { FrameworkElement element = container as FrameworkElement; var presenter = container as ContentPresenter; var gridCell = presenter.Parent as DataGridCell; if (element != null && item != null && gridCell != null) { var row = item as DataRow; if (row != null) { var cellObject = row[gridCell.Column.DisplayIndex]; //set template based on cell type if (cellObject is DateTime) { return element.FindResource("dateCell") as DataTemplate; } return element.FindResource("stringCell") as DataTemplate; } } return null; } }
这是我的stringCell DataTemplate
问题是为每个单元格调用模板选择器(如预期的那样),但我不知道它是哪个单元格,所以我不知道如何在TextBlock上设置Text.我很乐意做这样的事情
但是我没有什么可以获得CellIndex.我怎样才能做类似这样的事情,我可以设置Path = Row [CellIndex]