Я сам не очень разбираюсь в WPF ... однако, похоже, что если вы не определите GridViewColumnHeader, то вам не дадут его при доступе к .Header.
То есть, если вы определяете свой GridViewColumn как:
<GridViewColumn x:Name="stringColumn">
stringColumn.Header will return a string
</GridViewColumn>
Затем вызов stringColumn.Header вернет строку ... однако, если вы определите ее, как сказать:
<GridViewColumn x:Name="gridViewColumnHeaderColumn1">
<GridViewColumnHeader>
gridViewColumnHeaderColumn.Header will return a GridViewColumnHeaderColumn
</GridViewColumnHeader>
</GridViewColumn>
Затем проверка gridViewColumnHeaderColumn.Header вернет GridViewColumnHeaderColumn