1

动态添加和删除 GridViewColumns 时,我遇到了 WPF Listview 问题。如果我从 ListView 中删除一些列,然后添加删除的列,则添加的列不可见!

我正在删除这样的列。

     List<GridViewColumn> gvLists;

     for (int i = 0; i < grdView.Columns.Count; i++)
        {
            // keeping the grdView cols in to a list for later adding back
            gvLists.Add(grdView.Columns[i]);
        }

        // here removing the columns from ListView.GridView
        foreach (GridViewColumn g in gvLists)
        {
            if (g.Header.ToString() != "ID")
            {
                grdView.Columns.Remove(g);
            }
        }

然后像这样添加回那些cols

    foreach (GridViewColumn g in gvLists)
    {
       if(!grdView.Columns.Contains(g))  grdView.Columns.Add(g);
    }

但是这些添加的列在 ListView 中不可见。但是如果调试并检查列,所有添加的列都在那里。为什么添加的列不可见?

添加这些列后,我尝试调用 InvalidateMeasure 和 Arrange。但是没有用。

我还注意到另一件事是,ListView Loaded 事件被触发了好几次!!

我将 ListView 与 DataSet 中的 DataTable 绑定,而不是使用 MVVM。

还有一件事是,我对所有列都使用了 HeaderTemplates,如下所示:

 <GridViewColumn Width="50" Header="Name">
     <GridViewColumn.HeaderTemplate>
        <DataTemplate>
           <DockPanel>
             <TextBlock Height="23" TextAlignment="Center" Text="Name" Width="80"/>
             <Path Name="SortArrow" StrokeThickness="1" Fill="Gray" Data="M 5,5 L 10,10 L 15,5 L 5,5" Visibility="Collapsed"/>
           </DockPanel>
        </DataTemplate>
     </GridViewColumn.HeaderTemplate>
    <GridViewColumn.CellTemplate>
        <DataTemplate>
           <TextBox Text="{Binding Name.....}" Width="20" Height="15" />
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

列删除和添加是由窗口中复选框的检查值触发的。如果我选中该复选框,我将调用 RemoveCols(),并在取消选中时调用 AddCols()。

4

1 回答 1

0

尝试这个

foreach (GridViewColumn g in gvLists)
        {
            if (!grdView.Columns.Contains(g))
            {
                g = new GridViewColumn();
                grdView.Columns.Add(g);
            }
        }
于 2013-11-02T13:56:53.463 回答