问题描述
我正在使用UWP的Windows社区工具包中的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>
视图模型结构如下:
- 项目列表(DataGrid的来源)
- 列可见性属性
Itemviewmodel(列的DataContext)
- 项目属性
转换器是工具包提供的转换器。要绑定的布尔属性不是列(Itemviewmodel)的DataContext的一部分。我需要访问父视图模型(Pageviewmodel)以获取属性。
有人可以给我提示如何绑定到DataGridColumn的Visibility
属性吗?
如果在UWP中无法通过这种方式绑定,我愿意接受其他解决方案。
谢谢!
解决方法
首先,我无法根据您提供的代码重现运行时错误。
第二,Visibility
的{{1}}属性不是source code的依赖属性,因此绑定将不起作用。
因此,当您知道要隐藏或显示的目标列时,可以尝试直接将DataGridTextColumn
属性的值设置为Visibility
或Visibility.Collapsed
。
更新:
如果您想直接设置Visibility.Visible
属性,则需要知道目标列的索引(例如“ 0”),并在代码中的方法中编写代码,例如{ {1}}按钮上的事件处理程序,如下所示:
Visibility
您可以使用 {x:Bind} 扩展名而不是 {Binding} 扩展名来显示或隐藏Click
中的列以及绑定源类需要像这样实现System.ComponentModel.InotifyPropertyChanged
dataGrid1.Columns.ElementAt(0).Visibility = Visibility.Visible;
您可以更改DataGrid
的值以在运行时显示或隐藏列。