整理:WPF中XmlDataProvider的用法总结
原文:整理:WPF中XmlDataProvider的用法总结
一、目的:了解XmlDataProvider中绑定数据的方法
二、绑定方式主要有三种:
1、Xaml资源中内置:
-
<!--XPath指定一组节点-->
-
<XmlDataProvider x:Key="ds1" XPath="XUnits">
-
<x:XData>
-
<XUnits xmlns="">
-
<FFmpegCommandTextParameter Text="设置纪录时间" ToolTip="hh:mm:ss[.xxx]格式的记录时间也支持" Command="-t" Parameter="2001"/>
-
<FFmpegCommandTextParameter Text="搜索到指定的时间" ToolTip="[-]hh:mm:ss[.xxx]的格式也支持" Command="-ss" Parameter="2001"/>
-
<FFmpegCommandTextParameter Text="设置标题" ToolTip="设置标题" Command="-title" Parameter="2001"/>
-
<FFmpegCommandTextParameter Text="设置作者" ToolTip="设置作者" Command="-author" Parameter="2001"/>
-
<FFmpegCommandTextParameter Text="设置版权" ToolTip="设置版权" Command="-copyright" Parameter="2001"/>
-
<FFmpegCommandTextParameter Text="设置评论" ToolTip="设置评论" Command="-comment" Parameter="2001"/>
-
<FFmpegCommandCheckParameter Text="激活高质量设置" ToolTip="激活高质量设置" Command="-hq" IsChecked="false"/>
-
-
<FFmpegCommandTextParameter Text="设置目标文件类型" ToolTip="设置目标文件类型" Command="-author" Parameter="2001"/>
-
<FFmpegCommandCheckParameter Text="激活高质量设置" ToolTip="激活高质量设置" Command="-hq" IsChecked="false"/>
-
</XUnits>
-
</x:XData>
-
</XmlDataProvider>
2、Source属性绑定外部xml文件
<XmlDataProvider Source="myfile.xml" x:Key="mykey" XPath="/Root"/>
3、绑定代码XmlDocument实例
<XmlDataProvider x:Key="InventoryData" XPath="Inventory/Books" Document="{Binding MyDocument}"/>
三、绑定到控件并设置模板
1、绑定树形结构
-
<!--年级模版-->
-
<HierarchicalDataTemplate DataType="Grade" ItemsSource="{Binding XPath=Class}">
-
<TextBlock Text="{Binding XPath=@Name}"></TextBlock>
-
</HierarchicalDataTemplate>
-
<!--班级模版-->
-
<HierarchicalDataTemplate DataType="Class" ItemsSource="{Binding XPath=Group}">
-
<RadioButton Content="{Binding XPath=@Name}"></RadioButton>
-
</HierarchicalDataTemplate>
-
<!--分组模版-->
-
<HierarchicalDataTemplate DataType="Group">
-
<CheckBox Content="{Binding XPath=@Name}"></CheckBox>
-
</HierarchicalDataTemplate>
-
<!--数据模版-->
-
<XmlDataProvider x:Key="ds" XPath="Data/Grade">
-
<x:XData>
-
<Data xmlns="">
-
<Grade Name="一年级">
-
<Class Name="甲班">
-
<Group Name="A组"></Group>
-
<Group Name="B组"></Group>
-
<Group Name="C组"></Group>
-
</Class>
-
<Class Name="乙班">
-
<Group Name="A组"></Group>
-
<Group Name="B组"></Group>
-
<Group Name="C组"></Group>
-
</Class>
-
</Grade>
-
<Grade Name="二年级">
-
<Class Name="丙班">
-
<Group Name="A组"></Group>
-
<Group Name="B组"></Group>
-
<Group Name="C组"></Group>
-
</Class>
-
<Class Name="丁班">
-
<Group Name="A组"></Group>
-
<Group Name="B组"></Group>
-
<Group Name="C组"></Group>
-
</Class>
-
</Grade>
-
</Data>
-
</x:XData>
-
</XmlDataProvider>
-
-
-
-
<Menu ItemsSource="{Binding Source={StaticResource ds}}"></Menu>
-
<TreeView ItemsSource="{Binding Source={StaticResource ds}}" Margin="5"></TreeView>
2、绑定到ListBox、Comboboxl并设置模板
-
<!--Xml中的元素名可以作为DataType-->
-
<DataTemplate DataType="XUnit">
-
<Grid>
-
<StackPanel Orientation="Horizontal">
-
<Grid>
-
<Rectangle Fill="Red" Width="{Binding XPath=@Price}" Stroke="Yellow"></Rectangle>
-
<TextBlock Text="{Binding XPath=@Year}"/>
-
</Grid>
-
<TextBlock Text="{Binding XPath=@Price}"></TextBlock>
-
</StackPanel>
-
</Grid>
-
</DataTemplate>
-
<!--XPath指定一组节点-->
-
<XmlDataProvider x:Key="ds1" XPath="XUnits/XUnit">
-
<x:XData>
-
<XUnits xmlns="">
-
<XUnit Price="100" Year="2001"></XUnit>
-
<XUnit Price="120" Year="2002"></XUnit>
-
<XUnit Price="140" Year="2003"></XUnit>
-
<XUnit Price="180" Year="2004"></XUnit>
-
<XUnit Price="150" Year="2005"></XUnit>
-
<XUnit Price="200" Year="2006"></XUnit>
-
</XUnits>
-
</x:XData>
-
</XmlDataProvider>
四、设置XPath
1、直接设置类型的XPath对应的属性
-
<DataTemplate DataType="FFmpegCommandTextParameter">
-
<Grid Width="{Binding RelativeSource={RelativeSource AncestorType=ListBox},Path=ActualWidth}">
-
<Grid>
-
<Grid.ColumnDefinitions>
-
<ColumnDefinition/>
-
<ColumnDefinition Width="2*"/>
-
</Grid.ColumnDefinitions>
-
-
<TextBlock Text="{Binding XPath=@Text}" ToolTip="{Binding XPath=@ToolTip}"/>
-
<TextBox Text="{Binding XPath=@Parameter}" ToolTip="{Binding XPath=@Command}" Grid.Column="1"/>
-
</Grid>
-
</Grid>
-
</DataTemplate>
如:绑定FFmpegCommandTextParameter节点下面Text属性,注意:@转义字符必须添加
2、在 XmlDataProvider中设置根节点XPath
<XmlDataProvider Source="myfile.xml" x:Key="myfile" XPath="/Root"/>
3、筛选
<ListBox DataContext="{Binding Source={StaticResource SourceKey},XPath=/Root/Item[@ID/=1]}"/>
<ListBox DataContext="{Binding Source={StaticResource SourceKey},XPath=/Root/Item[4]}"/>
<ListBox DataContext="{Binding Source={StaticResource SourceKey},XPath=/Root/Item[@ID>2]}" />
-
<ListBox.ItemsSource>
-
<Binding Source="{StaticResource InventoryData}"
-
XPath="*[@Stock='out'] | *[@Number>=8 or @Number=3]"/>
-
</ListBox.ItemsSource>
XPath="Book[1]" 将返回第一个 Book 元素(“XML in Action”)。 请注意 XPath 索引从 1 而不是从 0 开始
XPath="Book[@*]" 将返回带有任意特性的所有 Book 元素。
XPath="Book[last()-1]" 将返回第二个至最后一个 Book 元素(“Introducing Microsoft .NET”)。
XPath="*[position()>3]" 将返回除前 3 个元素之外的所有 Book 元素。
4、匹配所有类型
-
<ListBox ScrollViewer.HorizontalScrollBarVisibility="Hidden">
-
<ListBox.ItemsSource>
-
<Binding Source="{StaticResource ds1}" XPath="*"/>
-
</ListBox.ItemsSource>
-
</ListBox>
五、数据同步到XML
-
XmlDataProvider xml = this.Resources["xmlData"] as XmlDataProvider;
-
xml.Document.Save("D:/temp.xml");
六、绑定到TextBlock
数据源一:
-
<XmlDataProvider x:Key="ss" >
-
<x:XData>
-
<curriculum_info xmlns="" class_name = "高等数学" teacher = "tttt" place ="24楼301室" time="31">34353</curriculum_info>
-
</x:XData>
-
</XmlDataProvider>
绑定到属性:
<TextBlock Text="{Binding Source={StaticResource ss}, XPath=curriculum_info/@class_name}"/>
绑定到节点:
<TextBlock Text="{Binding Source={StaticResource ss}, XPath=curriculum_info}"/>
数据源二:
-
-
<XmlDataProvider x:Key="ss" XPath="curriculum_info">
-
<x:XData>
-
<curriculum_info xmlns="" class_name = "高等数学" teacher = "吕良福" place ="24楼301室" time="31">34353</curriculum_info>
-
</x:XData>
-
</XmlDataProvider>
绑定到属性:
<TextBlock Text="{Binding Source={StaticResource ss}, XPath=@class_name}"/>
数据源三:
-
<XmlDataProvider x:Key="ss" XPath="List">
-
<x:XData>
-
<List xmlns="">
-
<curriculum_info xmlns="" class_name = "高等数学" teacher = "ttt" place ="24楼301室" time="31">34353</curriculum_info>
-
</List>
-
</x:XData>
-
</XmlDataProvider>
<TextBlock Text="{Binding Source={StaticResource ss},XPath=curriculum_info}"/>
注意:xmlns=""必须含有(重要)
整理:WPF中XmlDataProvider的用法总结的更多相关文章
- 整理:WPF中CommandBindings的用法
原文:整理:WPF中CommandBindings的用法 目的:了解一下CommandBindings.InputBindings.ICommandSource中在WPF中扮演什么样的角色 Comma ...
- WPF中StringFormat的用法
原文:WPF中StringFormat的用法 WPF中StringFormat的用法可以参照C#中string.Format的用法 1. C#中用法: 格式化货币(跟系统的环境有关,中文系统默认格式化 ...
- WPF中StringFormat的用法--显示特定位数的数字
原文:WPF中StringFormat的用法--显示特定位数的数字 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/huangli321456/art ...
- WPF中log4net的用法
WPF中如何使用log4nethttp://www.cnblogs.com/C-Sharp2/archive/2013/04/12/WPF-LOG4NET.html Apache log4net Ma ...
- wpf中INotifyPropertyChanged的用法
using System;using System.Collections.Generic;using System.ComponentModel;using System.Linq;using Sy ...
- 整理:WPF中Binding的几种写法
原文:整理:WPF中Binding的几种写法 目的:整理WPF中Bind的写法 <!--绑定到DataContext--> <Button Content="{Bindin ...
- 在 WPF 中的线程
线程处理使程序能够执行并发处理,以便它可以做多个操作一次.节省开发人员从线程处理困难的方式,设计了 WPF (窗口演示文稿基金会).这篇文章可以帮助理解线程在 WPF 中的正确用法. WPF 内部线程 ...
- WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化
WPF中的常用布局 一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...
- 转:WPF中ListBox的创建和多种绑定用法
先从最容易的开始演示ListBox控件的创建. Adding ListBox Items下面的代码是向ListBox控件中添加多项ListBoxItem集合.XAML代码如下:<ListBox ...
随机推荐
- Mysql读写分离操作
环境:两台centos环境,安装mysql(mariadb) web网站的优化: 缓存技术 数据库缓存 redis 文件缓存 图片 fastdfs 负载均衡 nginx 数据库主从备份,读写分离 图解 ...
- k8s集群搭建(一)
k8s简介 kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写.是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简 ...
- 2. 代理模式(C++)
1.介绍 代理模式:为其他对象提供一种代理以控制对这个对象的访问.这样实现了业务和核心功能分离. 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口.在某些情况下,一个对象不适合或者不能 ...
- Nat类型测试
这是一个测试NAT类型的小工具,一般也没太多用处,只有游戏玩家可能需要用来测试你的网络NAT类型是什么.NAT类型一般分为以下4种: 1. Full Cone NAT (完全圆锥型)2. Restri ...
- 10-赵志勇机器学习-meanshift
(草稿) meanshift 也是一种聚类方法. 优点在于:不需要提前指定类型数. 缺点就是计算量大 过程:(最一般的做法,没有使用核函数) 1. 逐点迭代,设置为位置中心 2. 计算所有点到位置中心 ...
- 05-numpy-笔记-fliplr
翻转矩阵的左右. 至少需要是2维矩阵. 例子: >>> A = np.diag([1.,2.,3.]) >>> A array([[ 1., 0., 0.], [ ...
- 7.Go退出向Consuk反注册服务,优雅关闭服务
注册和反注册代码 package utils import ( consulapi "github.com/hashicorp/consul/api" "log" ...
- electron/nodejs实现调用golang函数
https://www.jianshu.com/p/a3be0d206d4c 思路 golang 支持编译成c shared library, 也就是系统中常见的.so(windows下是dll)后缀 ...
- BST | 1064 完全二叉搜索树
OJ:https://www.patest.cn/contests/pat-a-practise/1064 (一)23分(3个case未过)代码 建树的规律是我瞎猜的.首先用样例数据分析. 对数据排序 ...
- 【CSP-S膜你考】我们的可可西里
我们的可可西里 题面 转眼到了2008年的6月9日,盼望已久的高考结束了.我们踏上了向西的旅程(本来是想写西去之路,可是考虑不太妥当).可可西里,多么诱人的名词,充满了奇幻的色彩和自然的淳朴.从可可西 ...