设为首页 收藏本站
查看: 980|回复: 0

win8开发之数据绑定控件Gridview以分组及不同项模板的形式呈现数据

[复制链接]

尚未签到

发表于 2015-5-21 07:54:05 | 显示全部楼层 |阅读模式
  好久没来园子里写东西了,自己感觉原因挺多,可能是由于每天工作后的疲惫,也可能是由于疲惫后的贪婪。没用的话就不多说了,现在开始说一下今天要介绍的内容。
  从标题可以看出咱们今天是要介绍一下关于win8的东西,关于win8的我就不多说了,本人从第一个win8项目到现在也有大半年的时间了,使用过程中有太多的感慨。。。此处省略几百字。。。
  好了,废话不说了,开始进入正题。
  关于win8中的GridView控件,凡是接触过win8应用的朋友们都知道90%以上的应用都是使用的这个数据绑定控件。关于我使用中的一些体会来和大家分享一下,希望能给予更多更好的建议。
  今天要介绍的内容主要有两点:
  1、GridView分组绑定数据
  2、GridView使用不同的项模板
  注:同样也适用于ListView的实现方式
  
  介绍实现方式之前咱们先看一下最终的实现效果。
DSC0000.png
  从图上我们可以看出数据是以分组的形式来呈现的,当然还用到了我们比较关心的问题,多个项模板。到底有几个项模板呢,下面我们一起来看下Code吧。
  


  • 先看一下GridView的xaml实现代码



   1:   
   9:              
  10:                  
  11:                     
  12:                          
  13:                              
  14:                                 
  15:                              
  16:                          
  17:                     
  18:                     
  19:                          
  20:                              
  21:                          
  22:                     
  23:                  
  24:              
  25:              
  26:                  
  27:                     
  28:                  
  29:              
  30:         


  怎么样,这段代码看起来不是太难懂吧,我们一起来简单分析一下。
  针对GridView的一些简单属性这里我就不说了,不太明白的朋友可以看下msdn上的帮助文档。先说一下ItemsSource这个属性,在这里我们可以看到

ItemsSource="{Binding Source={StaticResource ItemView}}",通过这句话我们可以看到ItemsSource需要绑定一个ItemView数据源,这个数据源就来源于我们在resource中定义的
CollectionViewSource,请看代码:
  


说到这里简单解释一下,使用CollectionViewSource是为了满足GridView分组的实现。下面我们接着了解后台代码的实现:


  • 在这里我们先定义一个分组的对象,这个对象实现了List的泛型集合



   1:      public class GroupInfoList : List


   2:      {      


   3:          public GroupInfoList() { }


   4:   


   5:          public object Key { get; set; }


   6:   


   7:          public new IEnumerator GetEnumerator()


   8:          {


   9:              return (IEnumerator)base.GetEnumerator();


  10:          }


  11:       }
  
  从上面的代码我们可以看出,每一个分组的对象都提供了一组分组的数据,如图
   DSC0001.png
  这组数据的实现方式如下:



   1:              GroupInfoList groupItem = new GroupInfoList
   2:              {
   3:                  new WorkItem { Background = "#F25022", IsShowCount = false, Name = "发起工作", MenuIcon = "/Common/Icons/iconA01.png" },
   4:                  new WorkItem { Background = "#00A4EF", IsShowCount = false, Name = "已办工作", MenuIcon = "/Common/Icons/iconA02.png" },
   5:                  new WorkItem { Background = "#7FBA00", Count = 99, IsShowCount = true, Name = "待办工作", MenuIcon = "/Common/Icons/iconA03.png" },
   6:                  new WorkItem { Background = "#FFB900", Count = 99, IsShowCount = true, Name = "退回工作", MenuIcon = "/Common/Icons/iconA04.png" }               
   7:              };
   8:              groupItem.Key = "我的工作";
  
  
  注:代码中用到的WorkItem是定义的一个类,这里就不贴出来了,我会在文章的最后把源码放上去,以供参考。
  说道这里我相信大家也都明白怎么对GridView进行分组绑定数据了吧。下面这行代码实现了数据源的绑定:



ItemView.Source =  new List{ groupItem };
  


  • 实现多模板的选择
  根据上图可以看出,每一项不一样的地方就是有没有显示笔数。所以我在这里定义了两个项模板,一个是带有笔数的模板,一个是不带有笔数的模板。看代码:



   1:      
   2:   
   3:         
   4:         
   5:              
   6:                  
   7:                     
   8:                     
   9:                          
  10:                          
  11:                          
  12:                     
  13:                  
  14:              
  15:         
  16:   
  17:         
  18:         
  19:              
  20:                  
  21:                     
  22:                     
  23:                          
  24:                     
  25:                  
  26:              a
  27:         
  28:         
  29:      
  我们在资源中定义了两个项模板,怎么来使用呢?这里先说一下实现方式,我们需要先定义一个类用来继承系统提供的DataTemplateSelector类,这个类的系统定义是这样的,启用应用程序级别的自定义模板选择逻辑。在DataTemplateSelector类中提供了一个虚方法SelectTemplateCore,这个方法为我们提供了一种选择模板的方式,我们需要重写并实现这个方法,通过这种方式就可以实现模板的选择了。接下来看后台代码的实现:







   1:      public class CustomerTemplateSelector : DataTemplateSelector
   2:      {
   3:          public DataTemplate WorkCountTemplate { get; set; }
   4:   
   5:          public DataTemplate NoneWorkCountTemplate { get; set; }
   6:   
   7:          protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
   8:          {
   9:              if (item is WorkItem)
  10:              {
  11:                  if ((item as WorkItem).IsShowCount)
  12:                  {
  13:                      return WorkCountTemplate;
  14:                  }
  15:                  return NoneWorkCountTemplate;
  16:              }
  17:              return base.SelectTemplateCore(item, container);
  18:          }
  19:      }
  是不是看上去如此的简单呢,接下来我们还需要做一个操作,就是怎么在前台使用我们定义的这个类,方法很简单,代码如下:



   1:   
   2:           
   6:      
  
  
  在这里简单说一下,

WorkCountTemplate="{StaticResource WorkCountTemplate}"这句代码的涵义,第一个WorkCountTemplate是我们在类中定义的WorkCountTemplate属性,
第二个WorkCountTemplate就是我们在资源中定义的WorkCountTemplate模板。最后,我们在GridView中怎么使用呢,请看代码:
ItemTemplateSelector="{StaticResource TemplateSelector}"



以上这些内容就是我们今天介绍的内容,怎么样?有没有看明白呢,如果你的答案是No的话,没关系,我会很热情的接收你的建议和意见。谢谢!
  源码的下载链接为:Lesson1.zip
  特别声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-68974-1-1.html 上篇帖子: win8: ListView 下篇帖子: Win8突然启动不了,静电的问题么?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表