DataGridTextColumn XAML中进行绑定Visibility
首先DataGridTextColumn
或其他任何受支持的dataGrid列都不位于的可视树中DataGrid
。因此,在默认情况下它不会继承DataContext
的DataGrid
。但是,它Binding
仅适用于DP,而不适用于DataGridColumn上的其他DP。
因为它们并不位于同一VisualTree中,所以使用DataContext进行的任何尝试RelativeSource
都将无法正常工作,因为DataGrid无法遍历DataGrid。
但是有两种方法可以实现:
首先使用Freezable
类-Freezable
即使对象不在视觉或逻辑树中,它们也可以继承DataContext。因此,我们可以利用它来进行使用。
首先创建从Freezable
和Data
DP继承的类,我们可以使用它们在XAML中进行绑定:
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的DataContext,然后可以与其数据DP绑定:
<DataGrid> <DataGrid.Resources> <local:BindingProxy x:Key="proxy" Data="{Binding}"/> </DataGrid.Resources> <DataGrid.Columns> <DataGridTextColumn Visibility="{Binding Data.MyColumnVisibility, Source={StaticResource proxy}}"/> </DataGrid.Columns> </DataGrid>
其次,您可以使用ElementName
或引用XAML中的任何UI元素x:Reference
。但是ElementName
只能在同一视觉树中使用,而x:Reference没有这种约束。
因此,我们也可以利用该优势。FrameworkElement
在“可见性”设置为“折叠”的XAML中创建虚拟对象。FrameworkElement将从其父容器(可以是Window或UserControl)继承DataContext。
并可以在DataGrid中使用它:
<FrameworkElement x:Name="dummyElement" Visibility="Collapsed"/> <DataGrid> <DataGrid.Columns> <DataGridTextColumn Header="Test" Binding="{Binding Name}" Visibility="{Binding DataContext.IsEnable, Source={x:Reference dummyElement}}"/> </DataGrid.Columns> </DataGrid>
本文来自博客园,作者:willamyao,转载请注明原文链接:https://www.cnblogs.com/robertyao/p/16595053.html
代码改变世界
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义