WPF DataGrid控件 DataGridTemplateColumn显现隐藏的绑定方式


采用常规的绑定方式,是无法直接对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.
*******************************************************************
------------------------------------------------------------------*/
View Code

2.View端配置Converter资源

<Window.Resources>        
        <converter:BoolConverter x:Key="BoolConverter" />
 </Window.Resources>
    
View Code

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>
View Code

4.记得添加一个CheckBox控件来控制就可以了


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM