WP7的XML操作详解:读取,过滤以及数据绑定

在这个小教程,我将演示在Windows Phone 7如何让ListBox的数据绑定XML数据。我将使用LINQ to XML,以便加载和读取数据,而且我将展示如何实现一个基本的过滤。

首先让我们先创建一个Windows Phone 7的应用程序项目示例,并添加以下两个demo xml文件。

people.xml

<?xml version="1.0" encoding="utf-8" ?>
<people>
<person>
<firstname>Kate</firstname>
<lastname>Smith</lastname>
<age>27</age>
</person>
<person>
<firstname>Tom</firstname>
<lastname>Brown</lastname>
<age>30</age>
</person>
<person>
<firstname>Tim</firstname>
<lastname>Stone</lastname>
<age>36</age>
</person>
<person>
<firstname>Ann</firstname>
<lastname>Peterson</lastname>
<age>27</age>
</person>
</people>


在这里我不得不感谢一直支持我的卤面网版主,是他让我提起兴趣写了这么一篇文章,再次感谢卤面网,一个非常不错的wp7开发论坛,后面我也将再次向大家发布几篇高质量文章,请大家到卤面上找我吧,呵呵

    进入正题:

 

 


PeopleCustom.xml

<?xml version="1.0"  ?>
<People>
<Person
FirstName="Kate"
LastName="Smith"
Age="27" />
<Person
FirstName="Tom"
LastName="Brown"
Age="30" />
<Person
FirstName="Tim"
LastName="Stone"
Age="36" />
<Person
FirstName="Ann"
LastName="Peterson"
Age="27" />
</People>

下一步是创建一个示例类将被用来存储XML元素值:

public class Person
{
string firstname;
string lastname;
int age;

public string FirstName
{
get { return firstname; }
set { firstname = value; }
}

public string LastName
{
get { return lastname; }
set { lastname = value; }
}

public int Age
{
get { return age; }
set { age = value; }
}
}

为了读取XML文件的信息,我们将使用的XDocument

所以你首先需要添加System.Xml.Linq.dll引用,然后using System.Xml.Linq;

XDocument loadedData = XDocument.Load("People.xml");

var data = from query in loadedData.Descendants("person")
select new Person
{
FirstName = (string)query.Element("firstname"),
LastName = (string)query.Element("lastname"),
Age = (int)query.Element("age")
};
listBox.ItemsSource = data;

在接下来的例子中,我们将通过数据的“年龄”属性值过滤源代码如下:

XDocument loadedCustomData = XDocument.Load("PeopleCustom.xml");
var filteredData = from c in loadedCustomData.Descendants("Person")
where c.Attribute("Age").Value == "27"
select new Person()
{
FirstName = c.Attribute("FirstName").Value,
LastName = c.Attribute("LastName").Value

};

listBox1.ItemsSource = filteredData;

为了显示的数据,我们将使用以下ItemTemplates绑定ListBox控件:

<StackPanel x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0" Orientation="Horizontal">
<TextBlock Text="XML Data:"/>
<ListBox x:Name="listBox">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Margin="10" >
<TextBlock Text="{Binding FirstName}"/>
<TextBlock Text="{Binding LastName}"/>
<TextBlock Text="{Binding Age}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<TextBlock Text="Filtered by Age 27:"/>
<ListBox x:Name="listBox1">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Margin="20" >
<TextBlock Text="{Binding FirstName}"/>
<TextBlock Text="{Binding LastName}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>



我希望你能喜欢我的文章!如果你有更多想法,请到卤面网 wp7开发论坛(codewp7.com)问答区联系我,我会很高兴知道你在想什么。同时wp7交流QQ群172765887中,也能找到我的身影,感谢大家

源码请猛击







posted on 2012-03-04 21:48  yewenpeng  阅读(1816)  评论(1编辑  收藏  举报