【发布时间】:2018-02-12 14:15:07
【问题描述】:
我有一个绑定到Datatable 的DataGrid,我想使用ID 唯一标识DataTable 中的行,但我不希望它显示在DataGrid 中
到目前为止我通过搜索和排除达到了什么:
- 数据列未预定义,所以我必须使用
AutoGenerateColumns=True,因此我无法手动定义列并将Visibility属性设置为False。 - 我不能使用
List或ObservableCollection来定义私有ID成员,因为数据是动态的。 - 我正在关注
MVVM,所以我不能直接使用AutoGeneratingColumns事件处理程序,也不能将View暴露给ViewModel。
我最接近答案的是使用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>
如何在保持先前条件的同时做到这一点? 提前致谢
编辑:
我使用Path=Column.Header 修复了DataGridColumnHeader 的代码,这对我来说没有意义,但这无关紧要;仍然,那里还有空柱,不知道如何删除它。
【问题讨论】:
-
在我的第一个猜测是错误的之后,有几个问题:为什么以及如何不知道该 DataGrid 中将公开什么?数据从何而来?它代表什么?您使用什么类来存储它(ExpandoObject、Dictionary、Dynamic 等)?
-
我的意思是我应该使用 DataGrid 对象,而不是其中的数据。对不起,如果我表达错了......我正在使用DataTable
-
不,我的意思是这部分“数据列未预定义”。您不知道每个 Collection Item 将具有哪些属性,这真是令人困惑。为什么不只是将它们映射到一组适当的 ViewModel 类和目标模板?
-
数据列是在每次使用时在 ViewModel 中定义的......但在设计时我不知道这些列是什么或有多少列
-
是的。当你把它写进问题时,我明白了。 为什么会这样?