有时做项目时,会遇到一种情况:需要把获取到的数据集合显示到首页,比如新闻,但是:

新闻也分类别啊,比如:图片类新闻、文字类新闻、视频类新闻。

那我们可能采用的模板就不一样了,那么,如何根据类别来选择模板呢?

(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模板选择的更多相关文章

  1. 最新 Windows 10 应用项目模板发布

    以下是最新的Visual Studio 2015 Windows 10 应用程序模板. Windows 10中几乎所有的官方应用都遵循这样一个设计模板:在左上方有一个所谓的导航栏.点击该导航按钮,左侧 ...

  2. Windows下Wireshark安装版本选择方式

    Windows下Wireshark安装版本选择方式   Wireshark版本分为1.X系列和2.X系列.1.X系列是早期版本,不提供中文版本.2.X系列是新版本,安装后,同时提供中文版和英文版.根据 ...

  3. wpf ListBox删除选择项(支持多项)

    搞了个ListBox删除选择项,开始老是不能把选择项删除干净,剩下几个.后来调试一下原来是ListBox在删除一个选择项之后立即更新,选择项也有变化.结果我想了个这样的方法来删除呵呵. Departm ...

  4. WPF 自定义列表筛选 自定义TreeView模板 自定义ListBox模板

    有很多项目,都有数据筛选的操作.下面提供一个案例,给大家做参考. 左侧是数据源,搜索框加TreeView控件,右侧是ListBox控件.在左侧数据列点击添加数据,然后点击确定,得到所筛选的数据. 下面 ...

  5. [New Portal]Windows Azure Virtual Machine (10) 自定义Windows Azure Virtual Machine模板

    <Windows Azure Platform 系列文章目录> 通过之前的文章,我相信大家对微软Windows Azure Virtual Machine有一定的了解了. 虽然微软提供了非 ...

  6. Windows下WEB服务器的选择与搭建

    本文主要基于支持perl的web服务器的选择. 一直基于web开发,服务器都是linux下使用webmin搭建的,惭愧的说一句,这么多年,也好好研究过WEB服务器,单从这个角度,是不是可以反应出web ...

  7. WPF:自定义ListBox的选择样式

    首先介绍一种简单地方法:就是通过自定义SystemColors类的参数来自定义WPF ListBox选择颜色的, SystemColors的HighlightBrushKey和HighlightTex ...

  8. 自定义WPF ListBox的选择样式

    (下图:进行多项选择的ListBox) 首先介绍一种简单地方法:就是通过自定义SystemColors类的参数来自定义WPF ListBox选择颜色的,SystemColors的HighlightBr ...

  9. [转载]SQL Server 2008 R2安装时选择的是windows身份验证,未选择混合身份验证的解决办法

    安装过程中,SQL Server 数据库引擎设置为 Windows 身份验证模式或 SQL Server 和 Windows 身份验证模式.本文介绍如何在安装后更改安全模式. 如果在安装过程中选择&q ...

随机推荐

  1. 使用python爬取P站图片

    刚开学时有一段时间周末没事,于是经常在P站的特辑里收图,但是P站加载图片的速度比较感人,觉得自己身为计算机专业,怎么可以做一张张图慢慢下这么low的事,而且这样效率的确也太低了,于是就想写个程序来帮我 ...

  2. usaco 土地并购 && hdu 玩具装箱

    土地并购: Description 约翰准备扩大他的农场,眼前他正在考虑购买N块长方形的土地.如果约翰单买一块土地,价格就是土地的面积.但他可以选择并购一组土地,并购的价格为这些土地中最大的长乘以最大 ...

  3. [poj 2553]The Bottom of a Graph[Tarjan强连通分量]

    题意: 求出度为0的强连通分量. 思路: 缩点 具体有两种实现: 1.遍历所有边, 边的两端点不在同一强连通分量的话, 将出发点所在强连通分量出度+1. #include <cstdio> ...

  4. Servlet/jsp 中 获取页面所有传递参数

    Enumeration en = request.getParameterNames(); while(en.hasMoreElements()){ String el = en.nextElemen ...

  5. Java多线程异步调度程序分析(二)

    源自:http://blog.sina.com.cn/s/blog_4cc16fc50100c0uh.html public abstract class Result {   //抽象的结果类 pu ...

  6. CSS3实现兼容性的渐变背景效果

    一.CSS3实现兼容性渐变背景效果,兼容FF.chrome.IE 渐变效果,现在主流的浏览器FF.Chrome.Opera.IE8+都可以通过带有私有前缀的CSS3属性来轻松滴实现渐变效果,IE7及以 ...

  7. 可变字典 NSMutableDictionary

    存到nsuesrDefault里面一个可变字典,然后用一个可变字典去接收. NSMutableDictionary *dic = [[NSUserDefaults standardUserDefaul ...

  8. win8 需要管理员权限才能删除此应用程序

    在win8系统里面 安装了 dotfuscator,安装在c盘,结果发现运行是提示需要有管理员权限,想重新删除后安装也不行,删除的时候提示也需要管理员权限,网上查了一下资料,windows自xp开始, ...

  9. HTML+CSS基础学习笔记(3)

    一.提交按钮.重置按钮 1.type="submit" 提交按钮 2.type="reset"   重置按钮 二.form表单中的label标签 格式: < ...

  10. 19个非常有用的Javascript类库

    Blackbird是一款非常酷的JavaScript调试工具,带有一个漂亮的界面显示和过滤调试信息. http://www.gscottolson.com/blackbirdjs/ Treesaver ...