WPF---数据绑定之Xml数据源(四)
一、场景
现在外部有一xml文件,我们想将该xml文件中的内容绑定到ListView中,该如何实现?
二、实现
xml文件的内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<Persons>
<Person id="1">
<Name>Mary</Name>
<Age>26</Age>
<FavorColor>Red</FavorColor>
</Person>
<Person id="2">
<Name>Mellisa</Name>
<Age>27</Age>
<FavorColor>Green</FavorColor>
</Person>
<Person id="3">
<Name>Tom</Name>
<Age>28</Age>
<FavorColor>Yellow</FavorColor>
</Person>
<Person id="4">
<Name>Jack</Name>
<Age>26</Age>
<FavorColor>Blue</FavorColor>
</Person>
<Person id="5">
<Name>Jim</Name>
<Age>23</Age>
<FavorColor>Pink</FavorColor>
</Person>
</Persons>
using System;
using System.Globalization;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Media; namespace BindingDemo2XmlDataSource
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
//XmlDocument doc = new XmlDocument();
//doc.Load(@"D:\MyStudy\Project\Practice\Practice\BindingDemo2XmlDataSource\Xml\Test.xml");
//XmlDataProvider provider = new XmlDataProvider();
//provider.Document = doc;
//provider.XPath = @"/Persons/Person";
XmlDataProvider provider = new XmlDataProvider();
provider.Source = new Uri(@"D:\MyStudy\Project\Practice\Practice\BindingDemo2XmlDataSource\Xml\Test.xml");
provider.XPath = @"/Persons/Person";
listView.DataContext = provider;
listView.SetBinding(ListView.ItemsSourceProperty, new Binding()); }
}
public class BackgroundConverter:IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string myColor = value.ToString();
SolidColorBrush myBrush = Brushes.Black;
switch(myColor)
{
case "Red":
myBrush = Brushes.Red;
break;
case "Green":
myBrush = Brushes.Green;
break;
case "Yellow":
myBrush = Brushes.Yellow;
break;
case "Blue":
myBrush = Brushes.Blue;
break;
case "Pink":
myBrush = Brushes.Pink;
break; default:
break;
}
return myBrush;
} public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
} public class WidthConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
double myWidth = (double)value;
return (myWidth - 270) / 2;
} public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
1 <Window x:Class="BindingDemo2XmlDataSource.MainWindow"
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
6 xmlns:local="clr-namespace:BindingDemo2XmlDataSource"
7 mc:Ignorable="d"
8 Title="BindingDemo3XmlDataSource" Height="350" Width="525">
9 <Grid>
10 <Grid.Resources>
11 <local:BackgroundConverter x:Key="backGroundCvt"></local:BackgroundConverter>
12 <local:WidthConverter x:Key="widthCvt"></local:WidthConverter>
13
14 </Grid.Resources>
15 <ListView Margin="10 20" Name="listView">
16 <ListView.View>
17 <GridView>
18 <GridViewColumn Header="Id" DisplayMemberBinding="{Binding XPath=@id}" Width="50">
19
20 </GridViewColumn>
21 <GridViewColumn Header="Name" DisplayMemberBinding="{Binding XPath=Name}" Width="100">
22
23 </GridViewColumn>
24 <GridViewColumn Header="Age" DisplayMemberBinding="{Binding XPath=Age}" Width="100">
25
26 </GridViewColumn>
27 <GridViewColumn Header="FavorColor" Width="auto">
28 <GridViewColumn.CellTemplate>
29 <DataTemplate >
30 <Grid>
31 <Grid.ColumnDefinitions>
32 <ColumnDefinition Width="*"/>
33 <ColumnDefinition Width="*"/>
34 </Grid.ColumnDefinitions>
35 <TextBlock Text="{Binding XPath=FavorColor}"
36 Grid.Column="0"
37 Width="{Binding ElementName=listView,Path=ActualWidth,Converter={StaticResource ResourceKey=widthCvt}}"
38 Foreground="{Binding XPath=FavorColor, Converter={StaticResource ResourceKey=backGroundCvt}}"
39 >
40
41 </TextBlock>
42 <TextBlock Grid.Column="1"
43 Background="{Binding XPath=FavorColor, Converter={StaticResource ResourceKey=backGroundCvt}}"
44 Width="{Binding ElementName=listView,Path=ActualWidth,Converter={StaticResource ResourceKey=widthCvt}}"
45 >
46
47 </TextBlock>
48 </Grid>
49 </DataTemplate>
50 </GridViewColumn.CellTemplate>
51
52
53
54 </GridViewColumn>
55 </GridView>
56 </ListView.View>
57 </ListView>
58 </Grid>
59 </Window>
运行结果如下:
注:绑定xml中的数据一定要用XPath而不是Path
Background="{Binding XPath=FavorColor, Converter={StaticResource ResourceKey=backGroundCvt}}"
WPF---数据绑定之Xml数据源(四)的更多相关文章
- C#WPF数据绑定模板化操作四步走
前言:WPF数据绑定对于WPF应用程序来说尤为重要,本文将讲述使用MVVM模式进行数据绑定的四步走用法: 具体实例代码如下: 以下代码仅供参考,如有问题请在评论区留言,谢谢 1 第一步:声明一个类用来 ...
- wpf数据绑定:xml数据绑定
wpf中可以通过XmlDataProvider,来实现xml数据的绑定.它通过XmlDataProvider来绑定外部资源,需要命名一个 x:Key 值,以便数据绑定目标可对其进行引用,Source设 ...
- WPF绑定各种数据源之xml数据源
一.WPF绑定各种数据源索引 WPF 绑定各种数据源之Datatable WPF绑定各种数据源之object数据源 WPF绑定各种数据源之xml数据源 WPF绑定各种数据源之元素控件属性 Bindin ...
- WPF——数据绑定(一)什么是数据绑定
注意:本人初学WPF,文中可能有表达或者技术性问题,欢迎指正!谢谢! 一:什么是数据绑定? “Windows Presentation Foundation (WPF) 数据绑定为应用程序提供了一种简 ...
- 微软原文翻译:适用于.Net Core的WPF数据绑定概述
原文链接,大部分是机器翻译,仅做了小部分修改.英.中文对照,看不懂的看英文. Data binding overview in WPF 2019/09/19 Data binding in Windo ...
- WPF 数据绑定Binding
什么是数据绑定? Windows Presentation Foundation (WPF) 数据绑定为应用程序提供了一种简单而一致的方法来显示数据以及与数据交互. 通过数据绑定,您可以对两个不同对象 ...
- WPF数据绑定Binding(二)
WPF数据绑定Binding(二) 1.UI控件直接的数据绑定 UI对象间的绑定,也是最基本的形式,通常是将源对象Source的某个属性值绑定 (拷贝) 到目标对象Destination的某个属性上. ...
- MVVM设计模式和WPF中的实现(四)事件绑定
MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...
- 剖析WPF数据绑定机制
引言 WPF框架采取的是MVVM模式,也就是数据驱动UI,UI控件(Controls)被严格地限制在表示层内,不会参与业务逻辑的处理,只是通过数据绑定(Data Binding)简单忠实地表达与之绑定 ...
- WPF 10天修炼 第十天- WPF数据绑定
WPF数据绑定 数据绑定到元素属性是将源对象指定为一个WPF元素,并且源属性是一个依赖属性,依赖属性内置了变更通知.当改变源对象依赖属性值之后,绑定目标可以立即得到更新,开发人员不需要手动编写响应事件 ...
随机推荐
- C语言:进制转化
16进制数4321转10进制:原来方法 =4*16^3+3*16^2+2*16^1+1*16^0 =4*16^3+3*16^2+2*16^1+1 =16*(4*16^2+3*16^1+2)+1 =16 ...
- ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: NO)解决办法
问题:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 很久没用这台电脑的mysql ...
- Java项目调试技巧及版本控制
开发项目中,调试是必不可少的. 本篇博客从以下4个方面介绍项目调试技巧: 响应状态码的含义 服务端断点调试技巧 客户端断点调试技巧 设置日志级别,并将日志输出到不同的终端 以及,最后简单的介绍了一下g ...
- SpringBoot通过Ajax批量将excel中数据导入数据库
Spring Boot通过Ajax上传Excel并将数据批量读取到数据库中 适合场景:需要通过excel表格批量向数据库中导入信息 操作流程 [1]前端上传一个excel表格 [2] 后端接收这个ex ...
- 【LeetCode】61. 旋转链表
61. 旋转链表 知识点:链表: 题目描述 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置. 示例 输入:head = [1,2,3,4,5], k = 2 输出:[4 ...
- P6753 [BalticOI 2013 Day1] Ball Machine
P6753 [BalticOI 2013 Day1] Ball Machine 题意 给你一个树,每次从根节点放一个求,如果其子节点有空这个球会向下滚,若有多个节点为空则找儿子中以子树内编号的最小值为 ...
- 高德纳/Donald Ervin Knuth
丸了丸了这位就是我人生的第一位爱豆了owo 感觉他的经历,气质都是我期望的类型呀. 即使没有人家的智商和绝顶天赋,也不断向彼努力吧. 从小喜欢音乐,会多种乐器(管风琴) 其实长得人高马大,高中校篮球队 ...
- Python脚本:爬取天气数据并发邮件给心爱的Ta
第一部分:爬取天气数据 # 在函数调用 get_weather(url = 'https://www.tianqi.com/foshan') 的 url中更改城市,foshan为佛山市 1 impor ...
- 使用vue实现简单的待办事项
待办事项 效果图 目录结构 详细代码 AddNew.vue <template> <div> <input v-model="content"/> ...
- vue传值 ---- >> 子传父,$emit()
划重点: $emit 绑定一个自定义事件event,当这个这个语句被执行到的时候,就会将参数arg传递给父组件,父组件通过@event监听并接收参数. 子组件: 1 <template& ...