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隐藏列的方法。
🏷️

标签

➡️

继续阅读