我有一个DataGrid
绑定到Datatable
,我希望使用DataTable
唯一标识ID
中的行,但我不是&# 39; t希望它显示在DataGrid
我通过搜索和排除到目前为止所得到的内容:
AutoGenerateColumns=True
,因此,我无法手动定义列并将Visibility
属性设置为False
。< / LI>
List
或ObservableCollection
来定义私人ID
成员,因为数据是动态的。MVVM
因此,我无法直接使用AutoGeneratingColumns
事件处理程序,并且无法将View
公开给ViewModel
。< / LI>
醇>
我最接近答案的是使用DataTrigger
使用Visibility
将False
设置为CellStyle
,但它只隐藏了单元格,而不是整个列,以及我也为DataGridColumnHeader
尝试了它并且它没有工作:
代码:
<Style x:Key="ColumnStyle" TargetType="DataGridColumnHeader">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Value}" Value="id">
<Setter Property="Visibility" Value="Hidden"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
如何在保持以前的条件的同时做到这一点? 提前致谢
我使用DataGridColumnHeader
修复了Path=Column.Header
的代码,这对我来说没有意义,但它无关紧要;不过,那里还有空柱,不知道如何移除它。
答案 0 :(得分:0)
听起来您想跟踪所选项目。如果要跟踪“选定的元素”,则必须使用CollectionView。
WPF控件不直接绑定到集合。它们绑定到CollectionView。如果你不给他们一个,他们将从你交给他们的任何集合中创造一个。如果您想要排序,过滤,订购和选择跟踪,CollectionView是您正在寻找的机器人: https://msdn.microsoft.com/en-us/library/system.windows.data.collectionview.aspx
控制它的创建并将其暴露(而不是原始集合)。
答案 1 :(得分:0)
我通过应用这种风格找到了解决方案:
<Style x:Key="ColumnStyle" TargetType="DataGridColumnHeader">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Value}" Value="id">
<Setter Property="Visibility" Value="Hidden"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
到DataGridCell
和DataGridColumnHeader
以及分配表格末尾的列,这会从表格中间删除空列。