众所周知DataGridColumns不是可视化树的一部分,所以无法进行相对绑定,因此它们不连接到DataGrid
此时我们可以在父级节点进行元素代理,使用该元素的DataContext
<Grid>
<Grid.Resources>
<FrameworkElement x:Key="ProxyElement" DataContext="{Binding}" />
</Grid.Resources>
<DataGrid ItemsSource="{Binding ListItem}" >
<DataGrid.Columns>
<DataGridTextColumn Header="动态显示隐藏列" Visibility="{Binding DataContext.ShowDetail, Converter={StaticResource Boolean2VisibilityReConverter}, Source={StaticResource ProxyElement}}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
上述方法也适用于连接DataContext到Popups和ContextMenus(即未连接到可视化树的任何元素)