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元素,并且源属性是一个依赖属性,依赖属性内置了变更通知.当改变源对象依赖属性值之后,绑定目标可以立即得到更新,开发人员不需要手动编写响应事件 ...
随机推荐
- Vim的操作
记录下vim的快捷键操作: I 进入编辑: Esc 退出编辑: 按ESC键 跳到命令模式,然后::w 保存文件但不退出vi:w file 将修改另外保存到file中,不退出vi:w ...
- SpringBoot+Redis 实现消息订阅发布
什么是 Redis Redis 是一个开源的使用 ANSI C语言编写的内存数据库,它以 key-value 键值对的形式存储数据,高性能,读取速度快,也提供了持久化存储机制. Redis 通常在项目 ...
- Allure测试框架 python
关于Allure Allure是一个report框架,可以基于一些测试框架生成测试报告,比较常用的一般是Junit/Testng框架: Allure 生成的报告样式简洁美观,同时又支持中文: Allu ...
- 智能停车场车牌识别系统【python】
百度AI:https://ai.baidu.com 申请App_id 代码重点:pip install baidu_api from aip import AipOcr import os # 百 ...
- 什么是ETL--ETL定义、过程和工具选型思路
ETL代表"提取.转换和加载".ETL 过程在数据集成策略中起着关键作用.ETL允许企业从多个来源收集数据并将其整合到一个集中的位置.ETL还使不同类型的数据可以协同工作. 概述 ...
- jvm源码解读--05 常量池 常量项的解析JVM_CONSTANT_Utf8
当index=18的时候JVM_CONSTANT_Utf8 case JVM_CONSTANT_Utf8 : { cfs->guarantee_more(2, CHECK); // utf8_l ...
- OpenFaaS实战之八:自制模板(maven+jdk8)
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Java面向对象12——static详解
static package oop.demon01.demon07; // static : public class Student { private static int a ...
- Python从零开始编写控制程序(一)
Python之从零开始编写控制程序(一) 在此声明:本博客仅供学习参考,任何产生相关违法犯罪行为与本人无关. 另外如果有师傅有好的思路和想法,可以和我一起沟通交流. 最近在一直尝试做Powershel ...
- Nginx 解析漏洞
目录 漏洞复现 漏洞成因 修复方案 参考链接 该漏洞与Nginx.php版本无关,属于用户配置不当造成的解析漏洞. 漏洞复现 访问http://172.17.0.1/uploadfiles/nginx ...