有需求要根据某变量的值将ListView中GridView的某一个GridViewColumn做隐藏设置,经过一番思考,总结了两种方法,但都需要对ListView中的GridView以及每一个GridViewColumn做命名:

1
2
3
4
5
6
7
8
<ListView x:Name="lvTest" SelectionMode="Single">
<ListView.View>
<GridView x:Name="gvTest" >
<GridViewColumn x:Name="gvcName" Width="85" />
<GridViewColumn x:Name="gvcAge" Width="85" />
</GridView>
</ListView.View>
</ListView>

方法一:设置列宽

这种方法相对简单,如果没有特殊条件限制,可以直接设置某一列的width=0,如:

gvcName.Width = 0

这样做虽然看上去这一列被隐藏了,但只要在ListView的header中拖动列改变其列宽,这些被隐藏的列还是可以被发现的,处于安全考虑,这种做法不值得提倡。

方法二:移除列

假设需要隐藏姓名列,那么可以使用gvTest.Columns.RemoveAt(0)或者gvTest.Columns.Remove(gvcName)。这样做确确实实让某一些彻底看不到了,但同时也会带来另一个问题,如果需要让某个被隐藏的列变成可见状态要怎么做?

这就要求我们在做remove命令前,先把这一列保存起来,不仅要保存这一列,还需要保存它的index:

1
2
3
4
int index = gvTest.Columns.IndexOf(gvcName);
GridViewColumn gvc = gvcName;
gvTest.Columns.Remove(gvcName);
//gvTest.Columns.RemoveAt(0)

如果需要显示回这一列,那么就:

1
gvTest.Columns.Insert(index,gvc);