簡體   English   中英

MVVM-根據列名稱隱藏Datagrid列,其中autogeneratecolumns = True

[英]MVVM - Hide Datagrid column based on column name with autogeneratecolumns = True

我有一個綁定到DatatableDataGrid ,我想使用ID唯一標識DataTable中的行,但是我不希望它顯示在DataGrid

到目前為止,我通過搜索和排除以下內容達到了什么:

  1. 數據列不是預定義的,因此,我必須使用AutoGenerateColumns=True ,因此,我無法手動定義列並將Visibility屬性設置為False
  2. 我無法使用ListObservableCollection定義私有ID成員,因為數據是動態的。
  3. 我正在關注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>

DataGridCellDataGridColumnHeader在表的末尾分配該列,這從表的中間刪除了空列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM