在 UWP DataGrid 中隐藏列
Hide column in UWP DataGrid
我正在使用 Windows UWP 社区工具包中的 DataGrid 控件,但找不到动态隐藏或显示列的解决方案。
Runtime error: Failed to assign to property 'Microsoft.Toolkit.Uwp.Ui.Controls.DataGridColumn.Visibility'
<controls:DataGrid x:Name="TradeGrid">
<controls:DataGridTextColumn
x:Uid="DataColumnPositionContract"
Width="SizeToCells"
Binding="{Binding Path=TradePosition.Contract.Name}"
Tag="Contract"
Visibility="{Binding ElementName=TradeGrid, Path=DataContext.IsContractVisible, Converter={StaticResource BoolToVisConv}}" />
</controls:DataGrid>
视图模型结构如下:
PageViewModel(绑定到页面)
- 项目列表(DataGrid 的项目源)
- 列可见性属性
ItemViewModel(列的 DataContext)
- 项目属性
转换器是工具包提供的转换器。要绑定的布尔值 属性 不是列 (ItemViewModel) 的 DataContext 的一部分。我需要访问父视图模型 (PageViewModel) 以获取 属性.
任何人都可以提示我如何绑定到 DataGridColumn 的 Visibility
属性 吗?
如果在 UWP 中无法通过这种方式进行绑定,我愿意接受其他解决方案。
谢谢!
首先,我无法根据您提供的代码重现运行时错误。
其次,DataGridTextColumn
的 Visibility
属性 不是 source code 的依赖项 属性,因此绑定将不起作用。
因此,当您知道要隐藏或显示的目标列时,可以尝试将 Visibility
属性 的值直接设置为 Visibility.Collapsed
或 Visibility.Visible
。
更新:
如果想直接设置Visibility
属性,需要知道目标列的索引(比如“0”),把代码写在code-behind 例如按钮上的 Click
事件处理程序,如下所示:
dataGrid1.Columns.ElementAt(0).Visibility = Visibility.Visible;
您可以使用 {x:Bind} 扩展而不是 {Binding} 扩展来显示或隐藏 DataGrid
,绑定源class需要实现System.ComponentModel.InotifyPropertyChanged,像这样
<controls:DataGridTextColumn
…… Visibility="{x:Bind SourceClass.Visible,Mode=OneWay}" />
您可以更改 SourceClass.Visible
的值以在运行时显示或隐藏列。
我正在使用 Windows UWP 社区工具包中的 DataGrid 控件,但找不到动态隐藏或显示列的解决方案。
Runtime error: Failed to assign to property 'Microsoft.Toolkit.Uwp.Ui.Controls.DataGridColumn.Visibility'
<controls:DataGrid x:Name="TradeGrid">
<controls:DataGridTextColumn
x:Uid="DataColumnPositionContract"
Width="SizeToCells"
Binding="{Binding Path=TradePosition.Contract.Name}"
Tag="Contract"
Visibility="{Binding ElementName=TradeGrid, Path=DataContext.IsContractVisible, Converter={StaticResource BoolToVisConv}}" />
</controls:DataGrid>
视图模型结构如下:
PageViewModel(绑定到页面)
- 项目列表(DataGrid 的项目源)
- 列可见性属性
ItemViewModel(列的 DataContext)
- 项目属性
转换器是工具包提供的转换器。要绑定的布尔值 属性 不是列 (ItemViewModel) 的 DataContext 的一部分。我需要访问父视图模型 (PageViewModel) 以获取 属性.
任何人都可以提示我如何绑定到 DataGridColumn 的 Visibility
属性 吗?
如果在 UWP 中无法通过这种方式进行绑定,我愿意接受其他解决方案。
谢谢!
首先,我无法根据您提供的代码重现运行时错误。
其次,DataGridTextColumn
的 Visibility
属性 不是 source code 的依赖项 属性,因此绑定将不起作用。
因此,当您知道要隐藏或显示的目标列时,可以尝试将 Visibility
属性 的值直接设置为 Visibility.Collapsed
或 Visibility.Visible
。
更新:
如果想直接设置Visibility
属性,需要知道目标列的索引(比如“0”),把代码写在code-behind 例如按钮上的 Click
事件处理程序,如下所示:
dataGrid1.Columns.ElementAt(0).Visibility = Visibility.Visible;
您可以使用 {x:Bind} 扩展而不是 {Binding} 扩展来显示或隐藏 DataGrid
,绑定源class需要实现System.ComponentModel.InotifyPropertyChanged,像这样
<controls:DataGridTextColumn
…… Visibility="{x:Bind SourceClass.Visible,Mode=OneWay}" />
您可以更改 SourceClass.Visible
的值以在运行时显示或隐藏列。