WPF --- 如何以Binding方式隐藏DataGrid列
💡
原文中文,约7000字,阅读约需17分钟。
📝
内容提要
本文介绍了如何以Binding的方式动态隐藏DataGrid列。作者首先创建了数据源People和控制列隐藏的IsVisibility,并使用VisibilityConverter将布尔值转化为Visibility。然后在界面中绑定IsVisibility,并使用转化器转化为Visibility,最后增加一个CheckBox控制是否显示列。作者发现直接找DataContext的方式无法生效,因为DataGridColumn不在可视化树中。为了解决这个问题,作者借助了System.Windows.Freezable抽象类,创建了一个自定义Freezable类,实现了预期功能。最后作者欢迎读者留言讨论更优雅的方案。
🎯
关键要点
- 本文介绍了如何以Binding的方式动态隐藏DataGrid列。
- 创建数据源People和控制列隐藏的IsVisibility,并使用VisibilityConverter将布尔值转化为Visibility。
- 在界面中绑定IsVisibility,并使用转化器转化为Visibility,增加CheckBox控制是否显示列。
- 直接找DataContext的方式无法生效,因为DataGridColumn不在可视化树中。
- DataGridColumn不继承Visual,而是直接继承DependencyObject,因此不在可视化树中。
- 通过创建自定义Freezable类来解决无法找到DataContext的问题。
- 自定义Freezable类能够承载依赖属性并提供属性变化通知。
- 在XAML中添加customFreezable资源,给DataGridTextColumn的Visibility绑定资源。
- 测试结果显示,勾选后能够显示年龄列,取消勾选后能够隐藏年龄列。
- 总结了DataGridTextColumn不在可视化树的原因及通过曲线救国实现Binding隐藏列的方法。
🏷️
标签
➡️