Я бы поставил этот ответ как комментарий к вашему посту, но я пока не могу комментировать, так что ...
Вам необходимо присвоить имя (использовать свойство «Name») элементу, к которому вы хотите получить доступ через «Binding ElementName», иначе вы не сможете его получить. В вашем случае вы должны явно создать GridViewColumnHeader, потому что GridViewColumn не имеет свойства Visibilty:
<GridViewColumnHeader Name="COL3">COL3</GridViewColumnHeader>
Возможно, вам также придется явно создать содержимое вашего GridViewColumn, если вы хотите, чтобы оно исчезло. Это означает, что вы должны использовать GridViewColumn.DisplayMemberBinding или GridViewColumn.CellTemplate, а также дать им имя или получить к ним доступ через RelativeSource.
Посмотрите на это для возможностей: http://www.wpfwiki.com/Default.aspx?Page=WPF%20Q5.3&AspxAutoDetectCookieSupport=1
Тем не менее, вы уже подумали об использовании расширителя?