windows phone 之ListBox模板选择
有时做项目时,会遇到一种情况:需要把获取到的数据集合显示到首页,比如新闻,但是:
新闻也分类别啊,比如:图片类新闻、文字类新闻、视频类新闻。
那我们可能采用的模板就不一样了,那么,如何根据类别来选择模板呢?
(1)首先,创建一个类DataTemplateSelector并继承ContentControl。
public class DataTemplateSelector : ContentControl
{
public virtual DataTemplate SelectTemplate(object item, DependencyObject container)
{
return null;
}
protected override void OnContentChanged(object oldContent, object newContent)
{
base.OnContentChanged(oldContent, newContent);
ContentTemplate = SelectTemplate(newContent, this);
}
}
(2)创建类ListDataTemplateSelector并继承DataTemplateSelector
public class ListDataTemplateSelector : DataTemplateSelector
{
public DataTemplate SHARE_VIDEO { get; set; }
public DataTemplate UPDATE_STATUS { get; set; }
public DataTemplate PUBLISH_BLOG { get; set; }
public DataTemplate PUBLISH_ONE_PHOTO { get; set; }
public DataTemplate SHARE_PHOTO { get; set; }
public DataTemplate SHARE_ALBUM { get; set; }
public DataTemplate PUBLISH_MORE_PHOTO { get; set; }
public DataTemplate SHARE_LINK { get; set; }
public DataTemplate SHARE_BLOG { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
feed feed = item as feed;
switch (feed.type)
{
case "SHARE_VIDEO":
return SHARE_VIDEO;
case "UPDATE_STATUS":
return UPDATE_STATUS;
case "PUBLISH_BLOG":
return PUBLISH_BLOG;
case "PUBLISH_ONE_PHOTO":
return PUBLISH_ONE_PHOTO;
case "SHARE_PHOTO":
return SHARE_PHOTO;
case "SHARE_ALBUM":
return SHARE_ALBUM;
case"PUBLISH_MORE_PHOTO":
return PUBLISH_MORE_PHOTO;
case "SHARE_LINK":
return SHARE_LINK;
case "SHARE_BLOG":
return SHARE_BLOG;
}
return base.SelectTemplate(item, container);
}
}
(3)如果需要,添加该类的命名空间,即可在ListBox中使用:
<ListBox ItemsSource="{Binding FeedList}" >
<ListBox.ItemTemplate>
<DataTemplate>
<local:ListDataTemplateSelector Content="{Binding}">
<!--1、分享视频-->
<local:ListDataTemplateSelector.SHARE_VIDEO>
<DataTemplate>
<Grid>
</Grid>
</DataTemplate>
</local:ListDataTemplateSelector.SHARE_VIDEO>
<!--2、更新状态-->
<local:ListDataTemplateSelector.UPDATE_STATUS>
<DataTemplate>
<Grid>
</Grid>
</DataTemplate>
</local:ListDataTemplateSelector.UPDATE_STATUS>
<!--3、发布日志-->
<local:ListDataTemplateSelector.PUBLISH_BLOG>
<DataTemplate>
<Grid Margin="0,20,0,0">
</Grid>
</DataTemplate>
</local:ListDataTemplateSelector.PUBLISH_BLOG>
<!--4、上传一张照片-->
<local:ListDataTemplateSelector.PUBLISH_ONE_PHOTO>
<DataTemplate>
<Grid Margin="0,20,0,0" >
</Grid>
</DataTemplate>
</local:ListDataTemplateSelector.PUBLISH_ONE_PHOTO>
<!--5、分享照片-->
<local:ListDataTemplateSelector.SHARE_PHOTO>
<DataTemplate>
<Grid Margin="0,20,0,0" >
</Grid>
</DataTemplate>
</local:ListDataTemplateSelector.SHARE_PHOTO>
<!--6、分享相册-->
<local:ListDataTemplateSelector.SHARE_ALBUM>
<DataTemplate>
<Grid Margin="0,20,0,0" >
</Grid>
</DataTemplate>
</local:ListDataTemplateSelector.SHARE_ALBUM>
<!--7、上传多张照片-->
<local:ListDataTemplateSelector.PUBLISH_MORE_PHOTO>
<DataTemplate>
<Grid Margin="0,20,0,0" >
</Grid>
</DataTemplate>
</local:ListDataTemplateSelector.PUBLISH_MORE_PHOTO>
<!--8、分享链接-->
<local:ListDataTemplateSelector.SHARE_LINK>
<DataTemplate>
<Grid>
</Grid>
</DataTemplate>
</local:ListDataTemplateSelector.SHARE_LINK>
<!--9、分享日志-->
<local:ListDataTemplateSelector.SHARE_BLOG>
<DataTemplate>
<Grid>
</Grid>
</DataTemplate>
</local:ListDataTemplateSelector.SHARE_BLOG>
</local:ListDataTemplateSelector>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
over
windows phone 之ListBox模板选择的更多相关文章
- 最新 Windows 10 应用项目模板发布
以下是最新的Visual Studio 2015 Windows 10 应用程序模板. Windows 10中几乎所有的官方应用都遵循这样一个设计模板:在左上方有一个所谓的导航栏.点击该导航按钮,左侧 ...
- Windows下Wireshark安装版本选择方式
Windows下Wireshark安装版本选择方式 Wireshark版本分为1.X系列和2.X系列.1.X系列是早期版本,不提供中文版本.2.X系列是新版本,安装后,同时提供中文版和英文版.根据 ...
- wpf ListBox删除选择项(支持多项)
搞了个ListBox删除选择项,开始老是不能把选择项删除干净,剩下几个.后来调试一下原来是ListBox在删除一个选择项之后立即更新,选择项也有变化.结果我想了个这样的方法来删除呵呵. Departm ...
- WPF 自定义列表筛选 自定义TreeView模板 自定义ListBox模板
有很多项目,都有数据筛选的操作.下面提供一个案例,给大家做参考. 左侧是数据源,搜索框加TreeView控件,右侧是ListBox控件.在左侧数据列点击添加数据,然后点击确定,得到所筛选的数据. 下面 ...
- [New Portal]Windows Azure Virtual Machine (10) 自定义Windows Azure Virtual Machine模板
<Windows Azure Platform 系列文章目录> 通过之前的文章,我相信大家对微软Windows Azure Virtual Machine有一定的了解了. 虽然微软提供了非 ...
- Windows下WEB服务器的选择与搭建
本文主要基于支持perl的web服务器的选择. 一直基于web开发,服务器都是linux下使用webmin搭建的,惭愧的说一句,这么多年,也好好研究过WEB服务器,单从这个角度,是不是可以反应出web ...
- WPF:自定义ListBox的选择样式
首先介绍一种简单地方法:就是通过自定义SystemColors类的参数来自定义WPF ListBox选择颜色的, SystemColors的HighlightBrushKey和HighlightTex ...
- 自定义WPF ListBox的选择样式
(下图:进行多项选择的ListBox) 首先介绍一种简单地方法:就是通过自定义SystemColors类的参数来自定义WPF ListBox选择颜色的,SystemColors的HighlightBr ...
- [转载]SQL Server 2008 R2安装时选择的是windows身份验证,未选择混合身份验证的解决办法
安装过程中,SQL Server 数据库引擎设置为 Windows 身份验证模式或 SQL Server 和 Windows 身份验证模式.本文介绍如何在安装后更改安全模式. 如果在安装过程中选择&q ...
随机推荐
- Poj 3683-Priest John's Busiest Day 2-sat,拓扑排序
Priest John's Busiest Day Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8872 Accept ...
- java 解惑
java对转义字符没有提供任何特殊处理.编译器在将程序解析成各种符号之前,先将 Unicode 转义字符转换成为它们所表示的字符[JLS 3.2]
- HTTPS、SSL与数字证书介绍
在互联网安全通信方式上,目前用的最多的就是https配合ssl和数字证书来保证传输和认证安全了.本文追本溯源围绕这个模式谈一谈. 名词解释 HTTPS:在HTTP(超文本传输协议)基础上提出的一种安全 ...
- Spark RDD/Core 编程 API入门系列 之rdd案例(map、filter、flatMap、groupByKey、reduceByKey、join、cogroupy等)(四)
声明: 大数据中,最重要的算子操作是:join !!! 典型的transformation和action val nums = sc.parallelize(1 to 10) //根据集合创建RDD ...
- [转]在MacOS和iOS系统中使用OpenCV
OpenCV 是一个开源的跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法. 最近试着在MacOS和iOS上使用OpenCV,发现网上关于在MacOS和iOS上搭建OpenCV的资料很 ...
- 使用GruntJS链接与压缩多个JavaScript文件
使用GruntJS链接与压缩多个JavaScript文件 自己写了个简单的HTML5 Canvas的图表库,可以支持饼图,折线图,散点图,盒子图 柱状图,同时支持鼠标提示,绘制过程动画效果等.最终我想 ...
- Idea实现WebService实例 转
作者:http://blog.csdn.net/dreamfly88/article/details/52350370 因为工作需要,数据传输部分需要使用webservice实现,经过两天的研究,实现 ...
- Python抓取淘宝IP地址数据
def fetch(ip): url = 'http://ip.taobao.com/service/getIpInfo.php?ip=' + ip result = [] try: response ...
- zookeeper与activemq最新存储replicatedLevelDB整合
测试环境:三台VM虚拟机centos6.4 64位 mini版,IP分别为192.168.1.191/192/193. 测试目的:测试activemq的failover以及与zookeeper的整合 ...
- Java 抽象类与接口总结
一.为什么要使用抽象类?有什么好处? 抽象类是通用接口.不同的子类可以用不同的方法表示此接口.通用接口建立起一种基本形式,以此表示所有子类的共同部分. 必须覆写父类abstract抽象的方法 含有抽 ...