通过绑定修改DataGrid的Column的Visibility

1 篇文章 0 订阅
1 篇文章 0 订阅

问题:因为 DataGridColumn s不是可视树的一部分,他们不能使用datagriddatacontext

解决方法1:代理类

    public class BindingProxy : Freezable
    {
        #region Overrides of Freezable
        protected override Freezable CreateInstanceCore()
        {
            return new BindingProxy();
        }
        #endregion

        public object Data
        {
            get { return (object)GetValue(DataProperty); }
            set { SetValue(DataProperty, value); }
        }

        public static readonly DependencyProperty DataProperty =
            DependencyProperty.Register("Data", typeof(object),
                                         typeof(BindingProxy));
}


<DataGrid …>
        <DataGrid.Resources>
            <local:BindingProxy x:Key="proxy" Data="{Binding}"></local:BindingProxy>
        </DataGrid.Resources>
        <DataGrid.Columns>
        <DataGridTextColumn Header="Grade"
            Visibility="{Binding Data.MyColumnVisibility, Source={StaticResource proxy}}"
            Binding="{Binding Path=Grade}">
        </DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>

 解决方法2:代元素

1.在用户控件的Resources里加一个代理FrameworkElement,并绑定控件的datacontex

2.把这个代理控件放在一个不可见的ContentControl

<FrameworkElement x:Name="dummyElement" Visibility="Collapsed" DataContext="{Binding}"/>


3.将DataGridColumnVisibility绑定Datacontext中的属性,比如IsEnable、或NoVisibilitySource采用x:Reference dummyElement

4.如果绑定属性是bool类型,还要使用Converter转换一下

<DataGrid …>
    <DataGrid.Columns>
        <DataGridTextColumn Header="No." 
            Visibility="{Binding DataContext.IsEnable, Source={x:Reference dummyElement},Converter={StaticResource BooleanToVisibilityConverter}}"
            Binding="{Binding Path=No}">
        </DataGridTextColumn>
        <DataGridTextColumn Header="Name"
            Visibility="{Binding DataContext.NoVisibility, Source={x:Reference dummyElement}}"
            Binding="{Binding Path=Name}">
        </DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>


参考网址:http://stackoverflow.com/questions/22073740/binding-visibility-for-datagridcolumn-in-wpf?noredirect=1


代码:http://download.csdn.net/download/xiudou_123/9836031


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值