[教程]在Windows Phone 程序中使用LINQ to XML以及执行数据绑定

201 views 0 comments posted at about 7 years ago Raymond Tang

C# Windows Phone Linq


LINQ是Language Integrated Query的简写,中文名称是语言集成查询,它是一组技术的组合,包括LINQ to DataSet(typed 以及untyped),LINQ to SQL(适用于SQL Server数据库),LINQ to XML(包括内存中以及XML文件中的数据),LINQ to Object,LINQ to Entities(结合Entity Framework使用)等。这些技术建立在将查询功能直接集成到 C# 语言(以及 Visual Basic 和可能的任何其他 .NET 语言)的基础上。借助于 LINQ,查询现在已是高级语言构造,就如同类、方法、事件等等。具体参考MSDN文档介绍LINQ 查询表达式(C# 编程指南)

使用LINQ to XML,我们可以XML数据按照对象的方式进行查询,而无需编写复杂的XPath等;这与之前的DOM技术有很大的不同。其主要包含于System.Xml.Linq.dll 程序集中,定义了三个命名空间:System.Xml.Linq, System.Xml.Schema 和 System.Xml.XPath。本文将演示如何在Windows Phone Silverlight应用程序中运用LINQ to XML以及执行数据绑定的操作。

1.创建Windows Phone项目

通过新建项目向导,创建Silverlight for Windows Phone项目PhoneAppTest。

2.创建XML文件

在解决方案中新建文件夹Data,在Data下创建XML文件Articles.xml,此文件包含需要用到的Article数据,内容如下:

<?xml version="1.0" encoding="utf-8" ?>
<Articles>
  <Article ID="1">
    <Title>Article Title 1</Title>
  </Article>
  <Article ID="2">
    <Title>Article Title 2</Title>
  </Article>
  <Article ID="3">
    <Title>Article Title 3</Title>
  </Article>
  <Article ID="4">
    <Title>Article Title 4</Title>
  </Article>
  <Article ID="5">
    <Title>Article Title 5</Title>
  </Article>
</Articles>
3.创建相应的实体类以及Presenter类

创建与<Article ID="5"><Title>Article Title 5</Title></Article>元素对应的Article类:
namespace PhoneAppTest
{
    /// <summary>
    /// Article entity class
    /// </summary>
    public class Article
    {
        /// <summary>
        /// Article ID
        /// </summary>
        public int ID { get; set; }
        /// <summary>
        /// Article Title
        /// </summary>
        public string ArticleTitle { get; set; }
    }
}
创建ArticlePresenter类,包含了实际的所有Article数据集合:

namespace PhoneAppTest
{
    /// <summary>
    /// Article collections
    /// </summary>
    public class ArticlesPresenter
    {
        /// <summary>
        /// All the articles
        /// </summary>
        public List<Article> AllArticles { get; set; }

        /// <summary>
        /// Constructor
        /// </summary>
        public ArticlesPresenter()
        {
            Initialize();
        }

        /// <summary>
        /// Initialize the list
        /// </summary>
        private void Initialize()
        {

            //load all xml via LINQ to XML
           XDocument doc = XDocument.Load("Data\\Articles.xml");
            var articles = from article in doc.Root.Elements("Article")
                           select new Article
                           {
                               ID = Convert.ToInt32(article.Attribute("ID").Value),
                               ArticleTitle = article.Element("Title").Value
                           };
            this.AllArticles = articles.ToList<Article>();
        }
    }
}

其中蓝色标注代码部分,即是通过LINQ to XML查询根节点下的所有Article节点,并且返回新的Article类的实例对象,最终运用查询表达式的ToList<T>方法将值传递给AllArticles属性;我们可以看出,通过LINQ,与以往的DOM操作相比,更加简洁,方便,快速。

4.在View中使用Presenter以及执行数据绑定

首先在MainPage.xaml的根节点元素中添加命名空间:xmlns:local="clr-namespace:PhoneAppTest";然后在资源中添加此对象实例元素:

<phone:PhoneApplicationPage.Resources>
        <local:ArticlesPresenter x:Key="articlesPresenter"/>
    </phone:PhoneApplicationPage.Resources>

添加ListBox控件,用于展示最终的结果,并且执行相应的数据绑定:

<ListBox x:Uid="ArticleList" DataContext="{Binding Source={StaticResource articlesPresenter}}" ItemsSource="{Binding Path=AllArticles}">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="*" />
                            </Grid.ColumnDefinitions>
                            <TextBlock Text="{Binding Path=ID}"FlowDirection="LeftToRight" Grid.Column="0" Padding="10" FontFamily="Trebuchet MS">
                            </TextBlock>
                            <TextBlock FlowDirection="LeftToRight" Text="{Binding Path=ArticleTitle}" Grid.Column="1" Padding="10" FontSize="20" FontFamily="Bodoni MT Black">
                            </TextBlock>
                        </Grid>

蓝色标注部分展示了如何进行数据绑定。

5.运行结果

在Windows Phone Emulator中运行,即可查看到运行的效果,设置PhoneApplicationPage的属性SupportedOrientations="PortraitOrLandscape",可以纵向或者横向模式查看程序运行效果:

本文为原创文章,若需转载,请注明来源http://hi.baidu.com/1987raymond, 若需要本文源码,请回复你的邮箱,或者发邮件到我的邮箱china.raymond[at]hotmail.com。

Add comment

Comments (0)

No comments yet.
In this Page