一、场景

现在外部有一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数据源(四)的更多相关文章

  1. C#WPF数据绑定模板化操作四步走

    前言:WPF数据绑定对于WPF应用程序来说尤为重要,本文将讲述使用MVVM模式进行数据绑定的四步走用法: 具体实例代码如下: 以下代码仅供参考,如有问题请在评论区留言,谢谢 1 第一步:声明一个类用来 ...

  2. wpf数据绑定:xml数据绑定

    wpf中可以通过XmlDataProvider,来实现xml数据的绑定.它通过XmlDataProvider来绑定外部资源,需要命名一个 x:Key 值,以便数据绑定目标可对其进行引用,Source设 ...

  3. WPF绑定各种数据源之xml数据源

    一.WPF绑定各种数据源索引 WPF 绑定各种数据源之Datatable WPF绑定各种数据源之object数据源 WPF绑定各种数据源之xml数据源 WPF绑定各种数据源之元素控件属性 Bindin ...

  4. WPF——数据绑定(一)什么是数据绑定

    注意:本人初学WPF,文中可能有表达或者技术性问题,欢迎指正!谢谢! 一:什么是数据绑定? “Windows Presentation Foundation (WPF) 数据绑定为应用程序提供了一种简 ...

  5. 微软原文翻译:适用于.Net Core的WPF数据绑定概述

    原文链接,大部分是机器翻译,仅做了小部分修改.英.中文对照,看不懂的看英文. Data binding overview in WPF 2019/09/19 Data binding in Windo ...

  6. WPF 数据绑定Binding

    什么是数据绑定? Windows Presentation Foundation (WPF) 数据绑定为应用程序提供了一种简单而一致的方法来显示数据以及与数据交互. 通过数据绑定,您可以对两个不同对象 ...

  7. WPF数据绑定Binding(二)

    WPF数据绑定Binding(二) 1.UI控件直接的数据绑定 UI对象间的绑定,也是最基本的形式,通常是将源对象Source的某个属性值绑定 (拷贝) 到目标对象Destination的某个属性上. ...

  8. MVVM设计模式和WPF中的实现(四)事件绑定

    MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  9. 剖析WPF数据绑定机制

    引言 WPF框架采取的是MVVM模式,也就是数据驱动UI,UI控件(Controls)被严格地限制在表示层内,不会参与业务逻辑的处理,只是通过数据绑定(Data Binding)简单忠实地表达与之绑定 ...

  10. WPF 10天修炼 第十天- WPF数据绑定

    WPF数据绑定 数据绑定到元素属性是将源对象指定为一个WPF元素,并且源属性是一个依赖属性,依赖属性内置了变更通知.当改变源对象依赖属性值之后,绑定目标可以立即得到更新,开发人员不需要手动编写响应事件 ...

随机推荐

  1. C语言:整数保存 原码 反码 补码

    #include <stdio.h> /* 本题结果为:-4 short类型占据2字节 ;赋值后实际占据了3个字节,所以有溢出警告提示,结果只保留0xfffc 保存二进制:1111 111 ...

  2. adb 记录ADB执行记录

    自动化测试需要获得当前的activity,来判断处于的页面是否正确: hierarchy view经常连不上真机,无法获得activity,所以直接用 adb命令来查看当前运行的 activity就可 ...

  3. mysql 修改my.ini

    1.C:\Program Files\MySQL\MySQL Server 5.5\bin>mysqladmin shutdown可能提示:localhost不能启动mysql2.C:\Prog ...

  4. 给potplayer配置iptv源,看所有你想看的电视

    目录 一.展示: 二.下载 三.播放 一.展示: 二.下载 Github 上的开源项目:iptv-org/iptv 传送门: https://github.com/iptv-org/iptv 该项目包 ...

  5. MVC框架介绍分析

    相信绝大多数学习过Javaweb的人都知道一个系统的模式--Spring模式,以这么模式中为基础,衍生出各种各样的新的模式,其中最重要的就是Spring下的Spring MVC MVC是Xerox P ...

  6. final修饰符(4)-"宏替换"

    对于一个final变量来说,不管它时类变量,实例变量还是局部变量,只要满足三个条件,这个final变量就不再是一个变量,而是一个直接量.final变量的一个重要用途,就是定义"宏变量&quo ...

  7. 【论文阅读】End to End Learning for Self-Driving Cars

    前言引用 [1] End to End Learning for Self-Driving Cars从这里开始 [1.1] 这个是相关的博客:2016:DRL前沿之:End to End Learni ...

  8. modelsim 独立仿真vivado的IP核及仿真脚本

    Modelsim独立仿真vivado的IP 最近一直在做local dimming项目的FPGA硬件实现,算法的其中一步就是直方图统计,即数字图像的某一灰度级的像素数,这个直方图的源码找了半天才搞到, ...

  9. 配置软ISCSI存储

    说明:这里是Linux服务综合搭建文章的一部分,本文可以作为单独使用RedHat Enterprise Linux 7搭建软ISCSI的参考. 注意:这里所有的标题都是根据主要的文章(Linux基础服 ...

  10. 第八篇 -- 对数据库mysql进行连接并压测

    参考链接:https://blog.csdn.net/laofashi2015/article/details/81296929 工具:mysql-8.0.12-winx64,apache-jmete ...