首页 > Windows开发 > 详细

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

时间:2020-03-08 15:33:47      阅读:133      评论:0      收藏:0      [点我收藏+]

采用常规的绑定方式,是无法直接对DataGridTemplateColumn的Visibility属性进行绑定的,直接无效,查了一些资料,原因是由于Column集合只是DataGrid的一个属性,这个集合在逻辑树或者视觉树中是看不到的,也不会继承DataContext属性。

1,解决办法是先建立一个Converter类,继承IValueConverter。在这里我于外又做了个简易的封装,创建一个BaseValueConverter<T>类,继承MarkupExtension类,及IValueConverter接口

技术分享图片
/// <summary>
    /// A base value converter that allows direct XAML usage
    /// </summary>
    /// <typeparam name="T">The type of this value converter</typeparam>
    public abstract class BaseValueConverter<T>:MarkupExtension,IValueConverter
        where T :class,new()
    {


        #region Markup Extension Methods

        /// <summary>
        /// Provides a static instance of the value converter
        /// </summary>
        /// <param name="serviceProvider">the service provider</param>
        /// <returns></returns>
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return mConverter ?? (mConverter = new T());
        }

        #endregion

        #region Private Members

        /// <summary>
        ///A single static instance of this value converter
        /// </summary>
        private static T mConverter = null; 

        #endregion

        #region Value Converter Methods
        /// <summary>
        /// The method to convert one type to another
        /// </summary>
        /// <param name="value"></param>
        /// <param name="targetType"></param>
        /// <param name="parameter"></param>
        /// <param name="culture"></param>
        /// <returns></returns>
        public abstract object Convert(object value, Type targetType, object parameter, CultureInfo culture);

        /// <summary>
        /// The method to convert a value back to it‘s source type
        /// </summary>
        /// <param name="value"></param>
        /// <param name="targetType"></param>
        /// <param name="parameter"></param>
        /// <param name="culture"></param>
        /// <returns></returns>
        public abstract object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture);

        #endregion
    }
BaseValuleConverter
技术分享图片
public class BooleanToVisibilityConverter:BaseValueConverter<BooleanToVisibilityConverter>
    {
        public override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if(parameter == null)

                return (bool)value ? Visibility.Hidden : Visibility.Visible;

            else
                return (bool) value ? Visibility.Visible : Visibility.Hidden;
         
        }

        public override object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
BooleanToVisibilityConverter

2,View 引入Converter 所在的命名空间

    xmlns:valueConverters="XXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

3.DataGridTemplateColumn的Visibility属性进行绑定,通过一个CheckBox的IsChecked属性来控制

技术分享图片
<CheckBox x:Name="cboxShowControl"  Content="控制DatagridColumn显隐">


<DataGridTemplateColumn Header="Test"
                                                Width="150"
                                                Visibility="{Binding Source={x:Reference cboxShowControl},Path=IsChecked,Converter={valueConverters:BooleanToVisibilityConverter}}">
View Code

在这里我的起名,BooleanToVisibilityConverter 与System的一致了。注意下一吧

 

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

原文:https://www.cnblogs.com/Bull-Rush/p/12442576.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!