在这个小教程,我将演示在Windows Phone 7如何让ListBox的数据绑定XML数据。我将使用LINQ to XML,以便加载和读取数据,而且我将展示如何实现一个基本的过滤。 首先让我们先创建一个Windows Phone 7的应用程序项目示例,并添加以下两个demo xml文件。 people.xml
复制代码
PeopleCustom.xml
复制代码
下一步是创建一个示例类将被用来存储XML元素值:
复制代码
复制代码
在接下来的例子中,我们将通过数据的“年龄”属性值过滤。源代码如下:
复制代码
为了显示的数据,我们将使用以下ItemTemplates绑定ListBox控件:
复制代码
- <?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>
- <?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>
- 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; }
- }
- }
- 您所在的用户组无法下载或查看附件
- 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;
- <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>