通过绑定修改DataGrid的Column的Visibility
2017-05-08 08:46
330 查看
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>
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
问题:因为
DataGridColumns不是可视树的一部分,他们不能使用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
相关文章推荐
- asp.net customdatagrid 绑定数据用到的ItemDataBound 中的HyperLinkColumn 的跳转链接 通过C#后台 处理的方法
- DataGrid通过webService和数据库绑定
- DataGrid中通过CHECKBOX来修改库里某个字段的值
- WPF使用DataGridComboBoxColumn完成绑定
- DataGrid和DataGridComboBoxColumn数据绑定
- Datagrid中添加的radiobutton不能通过后台代码修改
- 如何通过使用 VisualC # 绑定到 ArrayList 对象或结构的 DataGrid 控件
- WPF使用DataGridComboBoxColumn完成绑定
- C#中DataGridView绑定了DataTable后,通过代码修改DataGridView中的数据,总有一行(被修改过并被用户选中的行集合中索引为0的行)不能被UpDate回数据库的问题和解决办法
- WPF DataGrid Visibility的绑定
- 如何修改 和某表绑定的DataGrid的列标题?
- 通过 IDictionary对Silverlight DataGrid 进行动态数据绑定
- wpf datagrid中的 DataGridComboBoxColumn数据绑定
- WPF DataGrid 自动生成行号的方法(通过修改RowHeaderTemplate的方式)
- Silverlight DataGridTemplateColumn 中绑定事件
- 通过 IDictionary对Silverlight DataGrid 进行动态数据绑定
- 如何通过IValueConverter为DataGrid的列绑定样式?
- 修改Datagrid,在列上绑定其他控件。
- DataGrid中取HyperLinkColumn列的值,处理DataGrid中绑定的特殊字符
- WPF使用DataGridComboBoxColumn完成绑定