这几天做项目,需要做个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                         </GridViewColumn.CellTemplate>
24                     </GridViewColumn>
25                 </GridView>
26             </ListView.View>
27         </ListView>
28 
29         <!-- 列管理代码 -->
30         <!-- loc命名空间是ColumnObject的CLR命名空间 -->
31         <ListBox  ItemsSource="{Binding Path=ColumnCollection.GViewAllCollection}">
32             <!--<ListBox.ItemContainerStyle>
33                 <Style TargetType="ListBoxItem">
34                     <Setter Property="Focusable" Value="False" />
35                 </Style>
36             </ListBox.ItemContainerStyle>-->
37             <ListBox.ItemTemplate>
38                 <DataTemplate>
39                     <CheckBox IsChecked="{Binding Path=IsVisable}" 
40                               Content="{Binding Path=Header}"
41                               Margin="2"/>
42                 </DataTemplate>
43             </ListBox.ItemTemplate>
44         </ListBox>
45     </DockPanel>
46 </Window>
XAML

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-01-26
  • 2022-12-23
  • 2021-09-23
  • 2021-08-19
  • 2022-12-23
  • 2021-08-11
猜你喜欢
  • 2021-10-03
  • 2022-12-23
  • 2021-07-23
  • 2022-12-23
  • 2021-05-30
  • 2021-09-18
相关资源
相似解决方案