动态添加和删除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()。
答案 0 :(得分:0)
试试这个
foreach (GridViewColumn g in gvLists)
{
if (!grdView.Columns.Contains(g))
{
g = new GridViewColumn();
grdView.Columns.Add(g);
}
}