我有DataGrid的WPF表单。用户可以通过按钮手动将新列添加到数据网格中。这是添加新列的代码:
private void ColumnAdornerAddButton_MouseDown(object sender, MouseButtonEventArgs e)
{
DataGridTextAdornerColumn column = new DataGridTextAdornerColumn();
column.Header = "New column";
column.HeaderStyle = (Style)FindResource("columnHeader");
column.AdornerTemplate = (DataTemplate)FindResource("columnAdorner");
Binding binding = new Binding("Data");
binding.Mode = BindingMode.TwoWay;
column.Binding = binding;
grid.Columns.Insert(grid.Columns.Count - 1, column);
//Add adorner
DataGridColumnHeader header = GetColumnHeaderFromColumn(column);
AddAdorner(header, column.AdornerTemplate, column.IsReadOnly);
}
private DataGridColumnHeader GetColumnHeaderFromColumn(DataGridColumn column)
{
// dataGrid is the name of your DataGrid. In this case Name="dataGrid"
List<DataGridColumnHeader> columnHeaders = GetVisualChildCollection<DataGridColumnHeader>(grid);
foreach (DataGridColumnHeader columnHeader in columnHeaders)
{
if (columnHeader.Column == column)
{
return columnHeader;
}
}
return null;
}
问题是,在我将列添加到网格后,其标题尚未生成,并且在可视树中不存在。因此,我无法获得新列的标题并将adorner应用于它。 我试图在网格的可视树上递归调用ApplyTemplate而没有任何运气。
有没有办法强制网格为代码中的新列生成DataGridColumnHeader?
提前谢谢。
答案 0 :(得分:1)
在向datagrid添加列之后,请调用DataGrid的方法UpdateLayOut()。
datagrid.UpdateLayout();
我希望这会有所帮助。
答案 1 :(得分:0)
我只是想加强解决方案,
方法
datagrid.Items.Refresh();
将有助于重新创建视图(Datagrid)。
因此,您可以在datagrid中看到更新的值