Issue is ContextMenu
doesn't lie in same Visual tree as that of DataGrid and hence can't inherit DataContext of DataGrid.
You can use x:Reference
to get the DataGrid instance and bind with it's DataContext. (x:Reference is available from WPF 4.0)
Give x:Name
to dataGrid and bind with it:
<DataGrid ItemsSource="{Binding Lst, UpdateSourceTrigger=PropertyChanged}"
x:Name="dataGrid">
<DataGrid.Resources>
<ContextMenu x:Key="DataGridColumnHeaderContextMenu">
<MenuItem Header="{StaticResource General}">
<CheckBox Content="Testentry Header"
IsChecked="{Binding DataContext.TestCheck,
Source={x:Reference dataGrid}}"/>
....
</DataGrid>
Also you can achieve that using Freezable
class like you mentioned in question. Refer to my answer over here for the details to achieve that via Freezable.