WPF-数据模板深入(加载XML类型数据)
一、我们知道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类型数据)的更多相关文章
- Python使用Flask框架,结合Highchart,搭配数据功能模块,加载 HTML 表格数据
参考链接:https://www.highcharts.com.cn/docs/data-modules 1.javascript代码 var chart = Highcharts.chart('co ...
- hibernate框架学习之数据抓取(加载)策略
Hibernate获取数据方式 lHibernate提供了多种方式获取数据 •load方法获取数据 •get方法获取数据 •Query/ Criteria对象获取数据 lHibernate获取的数据分 ...
- 微信小程序(五) 利用模板动态加载数据
利用模板动态加载数据,其实是对上一节静态数据替换成动态数据:
- (转)利用WPF的ListView进行大数据量异步加载
原文:http://www.cnblogs.com/scy251147/archive/2012/01/08/2305319.html 由于之前利用Winform的ListView进行大数据量加载的时 ...
- 利用WPF的ListView进行大数据量异步加载
原文:利用WPF的ListView进行大数据量异步加载 由于之前利用Winform的ListView进行大数据量加载的时候,诟病良多,所以今天试着用WPF的ListView来做了一下,结果没有让我失望 ...
- 加载的DAL数据访问层的类型
using System; using System.Collections; using System.Reflection; using CSFrameworkV4_5.Core; using C ...
- 【Win10 应用开发】实现数据的增量加载
今天,老周有小故事讲,国庆期间.有一次老周在某站台上候公交车.老周旁边也站满了人,突然,有一位头发弄得像电线杆的小伙子,不知为何,没有先兆地就大笑起来. 老周先是看了那小伙子一眼,他手上没有拿什么东西 ...
- 【EF学习笔记08】----------加载关联表的数据 显式加载
显式加载 讲解之前,先来看一下我们的数据库结构:班级表 学生表 加载从表集合类型 //显示加载 Console.WriteLine("=========查询集合===========&quo ...
- hive 压缩全解读(hive表存储格式以及外部表直接加载压缩格式数据);HADOOP存储数据压缩方案对比(LZO,gz,ORC)
数据做压缩和解压缩会增加CPU的开销,但可以最大程度的减少文件所需的磁盘空间和网络I/O的开销,所以最好对那些I/O密集型的作业使用数据压缩,cpu密集型,使用压缩反而会降低性能. 而hive中间结果 ...
随机推荐
- Python 3 行代码 5 秒抠图的 AI 神器,根本无需 PS
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 苏克1900 PS:如有需要Python学习资料的小伙伴可以加点击下 ...
- HashMap、ConcurrentHashMap解析
一.HashMap分析 在JDK1.8之前,hashMap由数组+链表组成,1.8之后,对hashMap进行了一些修改,最大的不同就是利用了红黑树,所以其由数组+链表+红黑树组成.查找时,根据hash ...
- git安装和项目上传到GitHub
重装系统后,Git安装也要来重来 下载 国内下载地址:https://npm.taobao.org/mirrors/git-for-windows 安装忽略 生成密钥 输入然后都是下一步,生成密钥,生 ...
- 抓包工具Fiddler的简单使用
HTTP代理 http代理,就是代理客户机的http访问,主要代理浏览器访问页面 代理服务器是介于浏览器和web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务 ...
- Linux:quota磁盘配额设置
磁盘配额的概念 quota 磁盘配额功能只在指定的文件系统(分区)内有效,未设置配额的文件系统不受限制. quota 针对指定的用户账号.组账号进行限制,其他用户或组不受影响. 磁盘配额可以进行两方面 ...
- Jmeter通过正则表达式获取登录后token
1.引用名称:即参数化,便于后面调用登录后获取的token 2.正则表达式:"token":"([0-9 a-z -]+?)" 3.模板:设置为 "$ ...
- LR11录制手机/pad App脚本多种方法介绍(Mobile App补丁包)
总体来说,通过LR录制手机脚本的方式有三种:1)通过代理方式录制,保证手机电脑在同一个网段:2)通过抓包录制,在手机上安装Mobile Recorder:3)通过安卓模拟器录制,本地安装android ...
- c/c++ 混合编程.so
CC = gccC++ = g++LINK = g++ LIBS = -lz -lm -lpcre#must add -fPIC optionCCFLAGS = $(COMPILER_FLAGS) - ...
- C++标准库删除字符串中指定字符,比如空格
参见:https://zh.cppreference.com/w/cpp/algorithm/remove 使用 erase 和 remove 配合. #include <algorithm&g ...
- 详解C++ STL multiset 容器
详解C++ STL multiset 容器 本篇随笔简单介绍一下\(C++STL\)中\(multiset\)容器的使用方法及常见使用技巧. multiset容器的概念和性质 \(set\)在英文中的 ...