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

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

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

(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. 【解决】小米M1刷机教程(卡刷)

    1.下载合适的rom 下载地址为:http://rom.xiaomi.cn/ 选择合适的机型.硬件版本.固件类.软件版本后,点击“搜索”后,下载合适版本即可. 2.备份 个人手机主要需要备份的项目如下 ...

  2. add-apt-repository cloud-archive:liberty

    apt-get update && apt-get upgrade;

  3. 【转】谁说Vim不是IDE?(一)

    谁说Vim不是IDE?(一)   话说操作系统.编程语言和编辑器似乎是程序员永恒的吐槽话题,技术发展了几十年,大家讨论起这几个“之争”还是充满愤怒.津津乐道.有人描述过Emacs和VI程序员,大家沿着 ...

  4. 使用wampserver安装Composer的注意事项

    http://getcomposer.org/Composer-Setup.exe 修改C:\wamp\bin\php\php5.3.10中php.ini中的配置 在php.ini中开启php_ope ...

  5. The server does not support version 3.1 of the JEE Web module specification.

    使用MyEclipse2015打开MyEclipse2014编辑的项目,在服务器Tomcat 7部署时,提示"The server does not support version 3.1 ...

  6. 微信开发第2章 通过appid appsecret获取accesstoken

    通过 appid appsecret是可以获取accesstoken的 ,请不要一直获取,不然会把token的机会浪费掉,获取到后7200秒后失效,建议保存为6000秒到7000秒左右,具体可以查看微 ...

  7. appium

    电话键 KEYCODE_CALL 拨号键 5KEYCODE_ENDCALL 挂机键 6KEYCODE_HOME 按键Home 3KEYCODE_MENU 菜单键 82KEYCODE_BACK 返回键 ...

  8. Android studio开发常用快捷键

    最常用快捷键 1.Ctrl+E  可以显示最近编辑的文件列表 2.Shift+Click(点击)  可以关闭文件 3.Ctrl+[或者ctrl+]  可以跳到大括号的开头结尾 4.Ctrl+Shift ...

  9. Yii2 自动更新时间created_at updated_at

    创建model之后,新建一条记录,结果设计的表中created_at 字段 updated_at 字段 都是datetime 类型的,却不能自动插入当前时间.查看了资料,解决如下: 1.在class ...

  10. Java基础知识强化之网络编程笔记04:UDP之发送端的数据来自于键盘录入案例

    1. 数据来自于键盘录入 键盘录入数据要自己控制录入结束. 2. 代码实现: (1)发送端: package com.himi.updDemo1; import java.io.IOException ...