Как заставить DataGrid перестроить VisualTree для его столбцов
У меня есть форма WPF с DataGrid. Новые столбцы могут быть добавлены в таблицу данных вручную пользователем с помощью кнопки. Это код для добавления нового столбца:
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;
}
Проблема в том, что после того, как я добавил столбец в сетку, его заголовок еще не сгенерирован, и его нет в визуальном дереве. Таким образом, я не могу получить заголовок для нового столбца и применить к нему рекламодателя. Я попытался вызвать ApplyTemplate рекурсивно на визуальном дереве сетки без какой-либо удачи.
Есть ли способ заставить grid генерировать DataGridColumnHeader для нового столбца в коде?
Заранее спасибо.
2 ответа
Привет после добавления столбцов в datagrid, вызовите метод UpdateLayOut() DataGrid.
datagrid.UpdateLayout();
Я надеюсь, это поможет.
Я просто хочу улучшить решение, методdatagrid.Items.Refresh();
Поможет воссоздать вид (Датагрид). Таким образом, вы можете увидеть обновленное значение в сетке данных