这几天做项目,需要做个listview满足能够动态显示或隐藏某些列,由于自己是菜鸟水平,查了两天资料也没有想出解决办法。就在我山穷水尽的时候看到了Mgen的一篇博客,给了我很大启发,所以我也决定把自己做的一些东西给大家说说,希望能帮助像我一样的菜鸟!
我读了Mgen的博文(http://www.cnblogs.com/mgen/archive/2011/07/24/2115458.html),给我很大启发,但也发现有些缺陷。我感觉的缺陷列举如下:
1、控制隐藏显示的逻辑关系有问题,搞不好会抛异常。
2、你设置管理控制显隐的控件只能是继承于itemcontrol的控件,有一定的局限性(比如说我想做一组button按钮,每个button控制一列话,它就不能用了)
下面,我贴出自己的代码,然后分析我是怎样解决这些问题的。
1 <Window x:Class="mgen_autocolumns.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:loc="clr-namespace:mgen_autocolumns" 5 Title="Mgen" Height="350" Width="525"> 6 <DockPanel> 7 <!-- 已经有的ListView --> 8 <ListView Name="list" DockPanel.Dock="Top" > 9 <ListView.View> 10 <GridView loc:GridViewUtility.ColumnObjectCollection="{Binding Path=ColumnCollection}"> 11 <GridViewColumn Header="姓名" 12 Width="100" 13 DisplayMemberBinding="{Binding Name}" /> 14 <GridViewColumn Header="年龄" 15 Width="50" 16 DisplayMemberBinding="{Binding Age}" /> 17 <GridViewColumn Header="分数" 18 Width="100"> 19 <GridViewColumn.CellTemplate> 20 <DataTemplate> 21 <ProgressBar Width="80" Height="10" Maximum="100" Value="{Binding Score}" /> 22 </DataTemplate> 23