采用常规的绑定方式,是无法直接对DataGridTemplateColumn的Visibility属性进行绑定的,直接无效,究其原因,是由于Column集合只是DataGrid的一个属性,这个集合在逻辑树或者视觉树中是看不到的,也不会继承DataContext属性。
解决方式:
1.先创建一个Converter类,继承IValueConverter

/*---------------------------------------------------------------- * 作 者 :姜 彦 * 项目名称 :Utility.Tool.ViewModel.Converter * 类 名 称 :BoolConverter * 命名空间 :Utility.Tool.ViewModel.Converter * CLR 版本 :4.0.30319.42000 * 创建时间 :2018/12/20 11:50:32 * 当前版本 :1.0.0.1 * My Email :jiangyan2008.521@gmail.com * jiangyan2008.521@qq.com * 描述说明: * * 修改历史: * ******************************************************************* * Copyright @ JiangYan 2018. All rights reserved. ******************************************************************* ------------------------------------------------------------------*/ using System; using System.Windows.Data; namespace Utility.Tool.ViewModel.Converter { /// <summary> /// BoolConverter /// </summary> public class BoolConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (value != null) { switch ((bool)value) { case false: return System.Windows.Visibility.Collapsed; case true: return System.Windows.Visibility.Visible; default: return System.Windows.Visibility.Collapsed; } } return false; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } } } /*---------------------------------------------------------------- * 备 注 : * * * ******************************************************************* * Copyright @ JiangYan 2018. All rights reserved. ******************************************************************* ------------------------------------------------------------------*/
2.View端配置Converter资源

<Window.Resources> <converter:BoolConverter x:Key="BoolConverter" /> </Window.Resources>
3.DataGridTemplateColumn的Visibility属性进行绑定,通过一个CheckBox的IsChecked属性来控制

<DataGridTemplateColumn Header="Ints" Width="140" Visibility="{Binding Source={x:Reference cboxShowFrameStruct},Path=IsChecked,Converter={StaticResource BoolConverter}}"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Grid Background="Transparent" Margin="-2"> <View:DatasPickerView Height="20" DataCount="{Binding IntCount}" Datas="{Binding Ints,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Center" VerticalAlignment="Center"> <View:DatasPickerView.Style> <Style TargetType="{x:Type View:DatasPickerView}"> <Style.Triggers> <DataTrigger Binding="{Binding FrameColor}" Value="True"> <Setter Property="Foreground" Value="Red" /> </DataTrigger> <DataTrigger Binding="{Binding FrameColor}" Value="False"> <Setter Property="Foreground" Value="Green" /> </DataTrigger> </Style.Triggers> </Style> </View:DatasPickerView.Style> </View:DatasPickerView> </Grid> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn>
4.记得添加一个CheckBox控件来控制就可以了