Можно создать стиль для DataGridColumnHeader или DataGridRowHeader и установить для ContentTemplate значение DataTemplate, которое позволяет привязывать свойство Header. Для этого вам нужен IValueConverter, который включает привязку.
Заголовки находятся в пространстве имен Controls.Primitives:
xmlns:dp="clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls.Data"
Style:
<Style TargetType="dp:DataGridColumnHeader" >
<Setter Property="ContentTemplate" >
<Setter.Value>
<DataTemplate>
<ContentPresenter Content="{Binding Converter={StaticResource vcBC}}" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
Преобразователь:
public class BindingConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value.GetType().Name == "Binding")
{
ContentControl cc = new ContentControl();
cc.SetBinding(ContentControl.ContentProperty, value as Binding);
return cc;
}
else return value;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return null;
}
}
Экземпляр конвертера:
<yourassembly:BindingConverter x:Key="vcBC"/>