您的位置:首页 > 其它

通过绑定修改DataGrid的Column的Visibility

2017-05-08 08:46 330 查看

问题:因为
DataGridColumn
s不是可视树的一部分,他们不能使用datagrid的datacontext。
解决方法
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.将DataGridColumn的Visibility绑定Datacontext中的属性,比如IsEnable、或NoVisibility,Source采用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息