在 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(绑定到页面)

ItemViewModel(列的 DataContext)

转换器是工具包提供的转换器。要绑定的布尔值 属性 不是列 (ItemViewModel) 的 DataContext 的一部分。我需要访问父视图模型 (PageViewModel) 以获取 属性.

任何人都可以提示我如何绑定到 DataGridColumn 的 Visibility 属性 吗?

如果在 UWP 中无法通过这种方式进行绑定,我愿意接受其他解决方案。

谢谢!

首先,我无法根据您提供的代码重现运行时错误

其次,DataGridTextColumnVisibility 属性 不是 source code 的依赖项 属性,因此绑定将不起作用。

因此,当您知道要隐藏或显示的目标列时,可以尝试将 Visibility 属性 的值直接设置为 Visibility.CollapsedVisibility.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 的值以在运行时显示或隐藏列。