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中间结果 ...
随机推荐
- C#/WPF 仅启动一个进程实例
如何实现仅启动一个 WPF 进程实例,并在打开第二个时,自动唤起之前打开的进程. 1 代码入口 在 App.xaml.cs 文件中,重写 OnStartup 方法,并添加 Mutex 进程锁. /// ...
- Javascript中的几种函数
(1)普通函数:这种函数是我们日常使用中用的最多的,用function关键字定义的函数.这也是符合多种语言定义的. function foo(){ // code } (2)箭头函数:用=>运算 ...
- 通过GL函数处理图片以及其它相关功能
我们知道在屏幕后处理里面通过 Graphics.Blit 函数可以通过材质处理屏幕图片, 当我们想要处理一般图片的时候, 直接调用GL函数就行了, 按照习惯自己封装一个 Blit 方法 : ) { i ...
- xml的建模
xml建模的思路 1.分析需要被建模的文件中有那几个对象 2.每个对象拥有的行为以及属性 3.定义对象从小到大(从里到外) 4.通过23种的设计模式中的工厂模式,解析xml生产出指定对象 建模的好处 ...
- Java实现记事本|IO流/GUI
Java实现记事本 题目 利用GUI实现一个简单的记事本(notepad),即打开文件,文字内容显示在界面上: 允许对文字内容进行编辑,并可以保存到文件. 代码 package notePadExp; ...
- jmeter从上一个请求使用正则表达式抓取Set-Cookie值,在下一个请求中运用
工作中遇到的问题,登录请求,返回的Response Headers中有个参数Set-Cookie,需要抓取这个参数,运用到下一个请求中,见下图: 通过正则表达式抓取Set-Cookie的值,由于该值存 ...
- blue bossa
blue bossa
- LeetCode236. 二叉树的最近公共祖先
* @lc app=leetcode.cn id=236 lang=cpp * * [236] 二叉树的最近公共祖先 * * https://leetcode-cn.com/problems/ ...
- 【ECNU3542】神奇的魔术(二分交互题)
点此看题面 大致题意: 有一个\(1\sim 2^n\)的排列,\(n\le7\),每次交互告诉你有几个位置上的数是正确的,让你在\(1000\)轮以内猜出每个位置上的数. 二分 显然,我们可以通过二 ...
- JS中的undefined,null,"",0,'0'和false
){ console.log(); } '){ console.log() } '){ console.log() } if(false==0.0){ console.log() } if(false ...