Hi Sam,
Apologies for the delay in replying, had to have a bit of an experiment to get it to work. Give the following code a go. I just set up my own rubbish data source just so I could display some sort of data. It only displays if I right click over the first column heading and no where else... which I think is what you want, right? Let me know how you get on...any probs will continue to have a think.
<Grid>
<ListView Margin="8,8,33,12" ItemsSource="{Binding Source={StaticResource Stuff}, Path=MyCollection}">
<ListView.View>
<GridView>
<GridViewColumn Width="100" DisplayMemberBinding="{Binding}">
<GridViewColumnHeader>ProductName
<GridViewColumnHeader.ContextMenu>
<ContextMenu Name="MyMenu">
<MenuItem Header="Sort by..."/>
<MenuItem Header="Follow link..."/>
</ContextMenu>
</GridViewColumnHeader.ContextMenu>
</GridViewColumnHeader>
</GridViewColumn>
<GridViewColumn Width="100" Header="Product Name" DisplayMemberBinding="{Binding Path=Length}"/>
</GridView>
</ListView.View>
</ListView>
</Grid>