一、场景

现在外部有一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}}"

最新文章

  1. JSON--JavaScript Object Notation
  2. Win7下硬盘安装Linux双系统
  3. Oracle增删改DML脚本记录
  4. class &amp;&amp; struct
  5. iOS 用代码+Xib搭建UI界面实例
  6. [bug]The file ‘/xxx/xxx.aspx’ has not been pre-compiled, and cannot be requested
  7. php怎么判断网页是电脑访问还是手机访问
  8. BZOJ1103 [POI2007]大都市meg(DFS序)
  9. React-非dom属性-ref标签
  10. (原)Windows下编译指纹识别的Rel_4.1.0库
  11. iot 表索引dump《2》
  12. printf那点事
  13. setAction方法 Snackbar 右侧按钮可以被点击并处理一些事件
  14. HTML 5 &lt;embed&gt; 标签
  15. 微信公众号接口配置验证URL
  16. Java HotSpot(TM) 64-Bit Server VM warning
  17. maya2017卸载/安装失败/如何彻底卸载清除干净maya2017注册表和文件的方法
  18. Android百大框架排行榜
  19. 如何利用好github的问题
  20. Sencha Cmd 5.0.1.231 是坑爹货

热门文章

  1. MapReduce处理简单数据
  2. lombok之@Data
  3. Python图表库Matplotlib 组成部分介绍
  4. python -- 面向对象编程(类、对象)
  5. Kubernetes全栈架构师(基本概念)--学习笔记
  6. 【Azure 应用服务】App Service服务无法启动,打开Kudu站点,App Service Editor 页面均抛出:The service is unavailable
  7. linux 之awk 次数统计
  8. c++ 的父类 new 重载, 子类new 对象的时候会调用父类的operater new
  9. synchronized 优化手段之锁膨胀机制!
  10. &#128293; LeetCode 热题 HOT 100(11-20)