Dynamically binding to a column header of a DataGrid is not a transparently task. The problem is that the column header is not inheriting from FrameworkElement.
A simple solution to that problem is presented on the Developer Code Samples Gallery (Binding of DataGrid column header) and the TechNet Wiki (Binding of DataGrid Column Header).
There are several solutions for this problem. I will introduce the
simplest solution (in my opinion). Since DataGridColumn does not inherit
the DataContext of the superior element, you have to indicate the
DataContext to use. This can be easily done as the
following code snippet shows.
As you can see the header is defined by using a TextBlock. The Text
property of the TextBlock is bound to the property HeaderNameText of the
DataContext of the DataGrid. In a similar way you could use your own
DataContext for the DataGridColumns. By defining
the header in this way you could further customize your header by using
further elements, e.g. Images. The DataContext of the DataGrid is set
The DataContext is an own object containing the values of the DataGrid and the Header name.