一、我们知道WPF数据模板是当我们给定一个数据类型,我们为这个数据类型写好布局,就给这种数据类型穿上了外衣。

下面这个例子,能够帮助大家充分理解数据模板就是数据类型的外衣的意思:(里面的MyListBoxItemTemplete模板,上一个博客中有写https://www.cnblogs.com/bigbosscyb/p/11939201.html)

<Window x:Class="MyTemplete.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:MyTemplete"
xmlns:mm="clr-namespace:System.Collections;assembly=mscorlib"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<!--针对于UserInfo的数据模板-->
<DataTemplate x:Key="ItemTemplete2" DataType="{x:Type local:UserInfo}">
<Grid>
<StackPanel Orientation="Horizontal">
<Rectangle Fill="Orange" Stroke="Yellow" Width="{Binding UserWords.Length}"/>
<TextBlock Text="{Binding UserName}"/>
</StackPanel>
</Grid>
</DataTemplate>
<!--数据源-->
<mm:ArrayList x:Key="sources">
<local:UserInfo UserLogo="pack://application:,,,/MyTemplete;component/Pic/chaoge.jpg" UserName="超哥" UserWords="我随手一打就是标准的十五字"/>
<local:UserInfo UserLogo="pack://application:,,,/MyTemplete;component/Pic/minshener.jpg" UserName="敏婶儿" UserWords="我随手一打就是标准的十五字我差不多就是你超哥的两倍服不服"/>
<local:UserInfo UserLogo="pack://application:,,,/MyTemplete;component/Pic/bobo.jpg" UserName="博哥" UserWords="我就算了我少一点好啦你们随意就好"/>
</mm:ArrayList>
</Window.Resources>
<StackPanel>
<ListBox HorizontalAlignment="Center" ItemTemplate="{StaticResource ItemTemplete2}" ItemsSource="{StaticResource sources}"/>
<ComboBox ItemTemplate="{StaticResource MyListBoxItemTemplete}" ItemsSource="{StaticResource sources}"/>
</StackPanel>
</Window>

效果图如下:

从上面的效果图上我们可以看到,上下两个列表项是同一种数据类型展示出来的不同外观,这就是数据模板的魅力。

二、数据模板除了能够加载CLR类型数据外,还能够加载XML类型数据。

知识点:

1、你需要知道XmlDataProvider可以作为资源来使用这个标签的x:Xdata属性的值就是XML节点;

2、DataTemplete中要想读取节点属性,需要以XPATH=@节点属性名的形式来读取;

3、DataTemplete的DataType属性的值是要读取的XML数据的节点名。

下面便以一个实例来了解一下DataTemplete是如何应用到XML数据上的:

<Window x:Class="MyTemplete.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:MyTemplete"
xmlns:mm="clr-namespace:System.Collections;assembly=mscorlib"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<!--数据源 XML数据-->
<XmlDataProvider x:Key="xmlSource" XPath="Users/User">
<x:XData>
<Users xmlns="">
<User UserName="超哥" UserMoney="200"/>
<User UserName="敏婶儿" UserMoney="396"/>
<User UserName="博哥" UserMoney="247"/>
</Users>
</x:XData>
</XmlDataProvider>
<!--以XML种的User节点数据类型定制DataTemplete-->
<DataTemplate x:Key="xmlDataTemplete" DataType="User">
<Grid>
<StackPanel Orientation="Horizontal">
<Rectangle Fill="Orange" Stroke="Yellow" Width="{Binding XPath=@UserMoney}"/>
<TextBlock Text="{Binding XPath=@UserName}"/>
</StackPanel>
</Grid>
</DataTemplate>
</Window.Resources>
<StackPanel>
<ListBox HorizontalAlignment="Center" ItemTemplate="{StaticResource xmlDataTemplete}" ItemsSource="{Binding Source={StaticResource xmlSource}}"/>
<ComboBox ItemTemplate="{StaticResource xmlDataTemplete}" ItemsSource="{Binding Source={StaticResource xmlSource}}"/>
</StackPanel>
</Window>

运行效果如下:

WPF-数据模板深入(加载XML类型数据)的更多相关文章

  1. Python使用Flask框架,结合Highchart,搭配数据功能模块,加载 HTML 表格数据

    参考链接:https://www.highcharts.com.cn/docs/data-modules 1.javascript代码 var chart = Highcharts.chart('co ...

  2. hibernate框架学习之数据抓取(加载)策略

    Hibernate获取数据方式 lHibernate提供了多种方式获取数据 •load方法获取数据 •get方法获取数据 •Query/ Criteria对象获取数据 lHibernate获取的数据分 ...

  3. 微信小程序(五) 利用模板动态加载数据

    利用模板动态加载数据,其实是对上一节静态数据替换成动态数据:

  4. (转)利用WPF的ListView进行大数据量异步加载

    原文:http://www.cnblogs.com/scy251147/archive/2012/01/08/2305319.html 由于之前利用Winform的ListView进行大数据量加载的时 ...

  5. 利用WPF的ListView进行大数据量异步加载

    原文:利用WPF的ListView进行大数据量异步加载 由于之前利用Winform的ListView进行大数据量加载的时候,诟病良多,所以今天试着用WPF的ListView来做了一下,结果没有让我失望 ...

  6. 加载的DAL数据访问层的类型

    using System; using System.Collections; using System.Reflection; using CSFrameworkV4_5.Core; using C ...

  7. 【Win10 应用开发】实现数据的增量加载

    今天,老周有小故事讲,国庆期间.有一次老周在某站台上候公交车.老周旁边也站满了人,突然,有一位头发弄得像电线杆的小伙子,不知为何,没有先兆地就大笑起来. 老周先是看了那小伙子一眼,他手上没有拿什么东西 ...

  8. 【EF学习笔记08】----------加载关联表的数据 显式加载

    显式加载 讲解之前,先来看一下我们的数据库结构:班级表 学生表 加载从表集合类型 //显示加载 Console.WriteLine("=========查询集合===========&quo ...

  9. hive 压缩全解读(hive表存储格式以及外部表直接加载压缩格式数据);HADOOP存储数据压缩方案对比(LZO,gz,ORC)

    数据做压缩和解压缩会增加CPU的开销,但可以最大程度的减少文件所需的磁盘空间和网络I/O的开销,所以最好对那些I/O密集型的作业使用数据压缩,cpu密集型,使用压缩反而会降低性能. 而hive中间结果 ...

随机推荐

  1. js 时分秒转化为秒

    var time = '00:02:10'; var hour = time.split(':')[0]; var min = time.split(':')[1]; var sec = time.s ...

  2. 1_Swift概况

    Swift 标准库 解决复杂的问题并编写高性能,可读的代码 概况 Swift标准库定义了用于编写Swift程序的基本功能,其中包括 1.如基本数据类型Int,Double以及String 2.共同的数 ...

  3. [转]Eclipse插件开发之基础篇(1) 插件开发的基础知识

    原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/13/eclipse_plugin_1_0_2.html 名词翻译 有一些名词在翻译的过程中可能 ...

  4. MySQL 部署分布式架构 MyCAT (二)

    安装 MyCAT 安装 java 环境(db1) yum install -y java 下载 Mycat-server-1.6.5-release-20180122220033-linux.tar. ...

  5. centos7中python3.6报错ModuleNotFoundError: No module named '_ssl' 或者 Max retries exceeded with url: / (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.",))

    如果在运行爬虫时报此错:requests.exceptions.SSLError: HTTPSConnectionPool(host='www.baidu.com', port=443): Max r ...

  6. SQL server 2012 各个版本比较

    有关不同版本的 SQL Server 2012 所支持的功能的详细信息. 功能名称 Enterprise 商业智能 Standard Web Express with Advanced Service ...

  7. MATLAB粒子群优化算法(PSO)

    MATLAB粒子群优化算法(PSO) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 一.介绍 粒子群优化算法(Particle Swarm Optim ...

  8. 05webpack-webpack-dev-server时时跟新-第2种方式

    <!--14 第一种方式 自动打开浏览器 端口号 指定托管的跟目录 启动热刷新 这种是在webpack.json中去配置的 直接在package中 写 将“script”:{ "dev ...

  9. ARM的堆栈方式

    当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(Full Stack): 当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈(Empty Stack): 根据对战的生成方式分为:递增堆栈(Asce ...

  10. pyse基本操作命令一

    #coding=utf-8import timefrom selenium import webdriver dr = webdriver.Chrome()# dr = webdriver.Ie()d ...