[英]how to stop a specific column to be generated in DataGrid when the AutoGenerateColumns is set to True?
[英]MVVM - Hide Datagrid column based on column name with autogeneratecolumns = True
我有一個綁定到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
的代碼,這對我來說沒有意義,但是無關緊要; 盡管如此,那兒還有空的立柱,不知道如何將其移除。
聽起來您想跟蹤所選項目。 如果要跟蹤“選定元素”,則必須使用CollectionView。
WPF控件不會直接綁定到集合。 它們綁定到CollectionView。 而且,如果您不給他們一個禮物,他們會從您交給他們的任何收藏中創造一個自己的禮物。 如果要進行排序,過濾,排序和選擇跟蹤,則CollectionView是您要查找的機器人: https : //msdn.microsoft.com/zh-cn/library/system.windows.data.collectionview.aspx
只需控制它的創建並將其公開(而不是原始集合)即可。
我通過應用此樣式找到了解決方案:
<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
並在表的末尾分配該列,這從表的中間刪除了空列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.