Вы не можете изменять содержимое шаблона во время выполнения, если вы не хотите, чтобы каждый элемент, использующий этот шаблон, также изменял его содержимое.
В вашей ситуации я бы просто создал заголовок по мере необходимости. Вы можете сделать это проще, поместив код для создания заголовка в свой собственный метод.
public void AddColumnHeader(DataGridTextColumn column, string header1, string header2)
{
var panel = new StackPanel();
var labelA = new Label();
labelA.Content = header1;
panel.Children.Add(labelA);
var separator = new Separator();
separator.HorizontalAlignment = HorizontalAlignment.Stretch;
panel.Children.Add(separator);
var labelB = new Label();
labelB.Content = header2;
panel.Children.Add(labelB);
column.Header = panel;
}
Затем, чтобы применить свой заголовок, просто используйте
var column = new DataGridTextColumn();
AddColumnHeader(column);
DataGrid1.Columns.Add(column, "label content 1", "label content 2");