Tags: 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。

About author
Disclaimer
The opinions and comments expressed herein are my own personal opinions and do not represent my employer's view in any way.
Comments
No comments.
Add comment
Title
Title is required.
Name
Name is required.
Email
Please input your personal email with valid format.
Comments
Please input comment content.
Captcha Refresh
Input captcha:

Subscription

Statistics

Locations of visitors to this page