WPF ListView动态添加的列不可见

时间:2013-11-02 13:34:25

标签: c# wpf listview

动态添加和删除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()。

1 个答案:

答案 0 :(得分:0)

试试这个

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