【发布时间】:2014-03-18 07:45:53
【问题描述】:
我正在尝试为列标题创建带有标签和组合框的自定义列。 第一次正确加载网格。单击按钮后,我更改了 Datagrid 的 itmesources。我看到数据网格的单元格得到了更新,但没有看到标题。我还看到 Datagrid_Loaded 没有被调用。在调试时我发现对于“Binding”对象我提供了绑定路径,但是对于header我提供了source >,因此标题不会更新。如何为 header 提供路径,使其类似于 Binding 的路径?
private void DataGrid_Loaded(object sender, RoutedEventArgs e)
{
DataGrid grid = sender as DataGrid;
if (grid.Items.Count == 0)
{
return;
}
StageVM data = grid.Items[0] as StageVM;
if (data == null)
{
return;
}
int index = 0;
foreach (StageItemVM param in data.Stage)
{
var binding = new Binding(string.Format("Stage[{0}].StageItem.Value", index));
grid.Columns.Add(new CustomBoundColumn()
{
CanUserSort = false,
HeaderTemplateSelector = this.FindResource("ColumnHeaderTemplateSelector") as DataTemplateSelector,
HeaderStyle = this.FindResource("StageHeaderStyle") as Style,
Header = (new Binding().Source = param.StageItem.Key),
Binding = binding,
TemplateSelectorName = "StageRangeColumnTemplateSelector"
});
index++;
}
}
而customBoundColumn类如下:
public class CustomBoundColumn : DataGridBoundColumn
{
public string TemplateSelectorName { get; set; }
protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem)
{
var binding = new Binding(((Binding)Binding).Path.Path);
binding.Source = dataItem;
var content = new ContentControl();
content.ContentTemplateSelector =(DataTemplateSelector)cell.FindResource(TemplateSelectorName);
content.SetBinding(ContentControl.ContentProperty, binding);
return content;
}
protected override FrameworkElement GenerateEditingElement(DataGridCell cell, object dataItem)
{
return GenerateElement(cell, dataItem);
}
}
【问题讨论】: