数据处理概述

此页适用于 WPF 和 Silverlight 2

数据是每个用户界面的核心。从酒店预订到股票市场可视化,用户界面通常可提供显示某种形式的数据以及与其交互的途径。对所使用的用户界面组件以及布置这些组件以提供有用工作流程的方式进行选择,在很大程度上取决于将要使用的数据的性质。

数据源

您的应用程序可能只需要使用内部数据源,例如,对用户在表单中输入的某些数字执行计算。您所创建的其他应用程序可能需要访问外部数据源,例如数据库、Web 源、Web 服务或包含信息的本地文件。而且在某些情况下,应用程序可能需要同时访问内部数据源和外部数据源。Microsoft Expression Blend 目前可以支持两类外部数据源:XML 和 CLR 对象。

  • XML 数据源   一个本地或远程 XML 文件,可为应用程序提供 XML 格式的数据。可以使用已添加到项目中的 XML 文件,也可以将数据源设置为网站上的 XML 文件的 URL。

    Cc295161.alert_note(zh-cn,Expression.10).gif说明:

    Silverlight 2 不支持 XML 数据源。不过,您可以从 MSDN(此链接可能指向英文页面)的在 Silverlight 中分析 XML 数据(此链接可能指向英文页面)下查找有关使用 XML 数据的信息。

  • 公共语言运行时 (CLR) 对象数据源   一个包含公共属性、子属性和索引器的对象,可以将目标属性绑定到该对象。对于 WPF 应用程序,可以使用 Microsoft .NET Framework 类库,将数据从数据库转换为 ObservableCollection。有关详细信息,请参阅动手试验:创建 CLR 对象数据源,或参阅 MSDN 上的数据绑定概述主题(此链接可能指向英文页面)。有关 Silverlight 2 应用程序,请参阅 MSDN(此链接可能指向英文页面)上的 Silverlight 2 数据绑定(此链接可能指向英文页面)。

    Cc295161.alert_note(zh-cn,Expression.10).gif说明:

    Microsoft Expression Blend 不支持构造函数中带有参数的 CLR 对象数据源类。

Expression Blend 中打开的 WPF 项目的“项目”面板中的数据源列表

Cc295161.108f0ba7-cf63-46a9-9512-5662579c9a3f(zh-cn,Expression.10).png

在 Expression Blend 中,与活动文档关联的外部数据源将在“项目”面板的“数据”下列出。可以使用按钮 Cc295161.25182a96-9a69-478a-9cfe-5b360e6a9bea(zh-cn,Expression.10).png 添加和删除数据源,也可以将数据项 Cc295161.05fe4b1d-f584-4bd2-99b6-8bc2d735a89d(zh-cn,Expression.10).png 拖到美工板上,以创建与这些项建立数据绑定的控件。如果未设置任何数据源,“项目”面板中的“数据”将仅显示用于创建数据源的按钮。

Cc295161.7e183f1f-37d8-4dcb-980c-19a5d61ca087(zh-cn,Expression.10).gif返回页首

数据绑定

数据绑定是将数据源中的项连接到用户界面组件(控件)的过程。这意味着,每当数据发生更改时,界面组件将有选择地反映这些更改;同样,当界面组件发生更改时,数据也会相应地发生更改。最简单的数据绑定示例是内部绑定到矩形宽度的滑块条控件。移动滑块条就会放大或缩小矩形。

Expression Blend 提供了一种简单而统一的方法,可将应用程序中的元素绑定到不同的数据源,以及配置用于显示和修改数据的元素。绑定本质上是在源和目标之间建立的。源通常是数据源或其他控件,而目标通常是控件。在滑块条示例中,源是滑块条控件的“Value”属性,而目标是矩形的“Width”属性。

通过使用“属性”面板中与属性关联的“高级属性选项”Cc295161.d6ba8f4a-b8a2-445a-af0b-a267dfade6e1(zh-cn,Expression.10).png 按钮,或者将“项目”面板中“数据”下的各项拖到美工板上,您可以创建绑定。(有关说明,请参阅将数据绑定到属性或元素。)这两种方法均可打开“创建数据绑定”对话框,从中可以创建控件(目标)与数据字段或其他控件(源)之间的绑定链接。

展开了“高级选项”部分的“创建数据绑定”对话框

Cc295161.8fcdc007-d9cd-430d-81d5-29ac9b88ee31(zh-cn,Expression.10).png

“创建数据绑定”对话框将显示三个用于选择数据源的基本选项以及一些高级选项:

  • 数据字段   此选项可显示在项目中创建的 XML 和 CLR 对象数据源及其关联字段。您可以添加新的 XML 数据源或 CLR 对象数据源,也可以使用已创建的现有连接。若要选择要绑定到的字段,请在“数据源”下选择一项,然后在“字段”下选择数据项。除非拥有可用的值转换器(请参阅本主题下文中的“高级选项”),否则数据项的类型必须与所绑定到的属性的类型匹配。创建数据绑定之后,将用数据项填充目标属性的值。

  • 元素属性   通过使用此选项,可以在同一个可扩展应用程序标记语言 (XAML) 文件中,将某个元素的属性绑定到另一个元素的属性,这与本主题前文提到的示例中将矩形的“Width”属性绑定到滑块条的“Value”属性类似。若要创建此绑定,请在“属性”面板中找到目标属性(在本例中是矩形的“Width”属性),单击“高级属性选项”Cc295161.d6ba8f4a-b8a2-445a-af0b-a267dfade6e1(zh-cn,Expression.10).png 按钮,然后单击“数据绑定”。单击“元素属性”选项卡,在左侧窗格中浏览元素以找到滑块条(源元素),然后在右侧窗格中浏览属性列表以找到“Value”属性。

    Cc295161.alert_note(zh-cn,Expression.10).gif说明:

    Silverlight 2 不支持元素到元素的绑定。

  • 显式数据上下文   通过使用此选项,可以绑定到针对当前元素或其某个父元素所指定的上下文中的数据源。数据上下文是一种在多个控件之间共享数据的简便方法,该方法建立一个范围,使此范围内的所有数据绑定属性均继承一个公共源。例如,可以向包含“ListBox”对象和“TextBlock”对象的网格对象指定数据上下文,并将这两个对象的属性绑定到同一上下文中的不同数据项。如果需要创建“大纲-细节”设计,这种方法将很有用。在这种设计中,单击列表(大纲窗格)中的某个项,就会在另一个对象(细节窗格)中显示该项的相关信息。“显式数据上下文”选项卡中的“字段”窗格中列出了所继承的数据上下文提供的数据连接字段,您可以在此窗格中为目标属性选择适当的数据连接字段。

    Cc295161.alert_note(zh-cn,Expression.10).gif说明:

    在前面列出的全部三个选项中,可以选择针对数据绑定所使用的自定义路径或 XML 路径语言 (XPath) 表达式。系统将使用您在“字段”下选择的项的路径自动填充“XPath”。不过,您可以在该路径上附加限制以减少从数据源引入的数据,例如标识所需的 XML 数据中的特定节点(如数组中的一项)。有关如何使用 XPath 的详细信息,请参阅 MSDN(此链接可能指向英文页面)上的主题 XPath 语法(此链接可能指向英文页面)和如何:使用 XMLDataProvider 和 XPath 查询绑定到 XML 数据(此链接可能指向英文页面)。

  • 高级选项   对话框的高级部分,可以通过单击底部的展开器 Cc295161.81e110f1-4068-4299-957d-0693cea95088(zh-cn,Expression.10).png 加以访问,可用于设置高级选项,例如数据流的方向(请参阅本主题下文中的“数据流”)、目标属性的默认值、值转换器和转换器参数。值转换器是用于转换值类型的 .NET Framework 类方法。当源属性和目标属性的类型不匹配时,就需要使用值转换器。通过单击值转换器框旁边的“...”按钮,再从“添加值转换器”对话框中选择一个值转换器,即可添加值转换器。也可以指定转换器参数(例如,若要从双精度转换为小数,可能需要指定小数点后显示的小数位数的值)。有关值转换器的示例,请参阅动手试验:创建并应用值转换器

Cc295161.7e183f1f-37d8-4dcb-980c-19a5d61ca087(zh-cn,Expression.10).gif返回页首

数据流

数据流定义为数据在源和目标之间流动的方向。如果是用于缩放矩形的滑块条,只需要从滑块条(源)到矩形(目标)的单向绑定。对于数据流,支持以下绑定配置:

  • 默认值   这与“TwoWay”数据流相同。

  • OneWay   对源所做的更改会自动更新目标,而对目标所做的更改不会更新源。

  • TwoWay   对源所做的更改会自动更新目标,反之亦然。

  • OneWayToSource   与 OneWay 相反,在目标更改后会自动更新源。当目标属性不属于依赖属性时,会出现在“属性”面板中看不到目标属性的情况。在这种特殊情况下,此方法非常有用。使用 OneWayToSource 绑定,可以改为对目标设置数据绑定。

  • **OneTime   **从源向目标执行一次初始化,但对源的后续更改不会更新目标。

若要查看数据流的实际效果,请考虑以下包含“Slider”控件(源)和“TextBox”控件(目标)的用户界面示例:

演示数据流通过绑定类型的情况

Cc295161.955af9ad-a12d-41c6-9106-1ec4be43d0d4(zh-cn,Expression.10).png

在上述示例图中,按照以下操作步骤为文本框(目标)设置绑定:

  1. 在“属性”面板中,单击与“TextBox”的“Text”属性(在“公共属性”下)关联的“高级属性选项”Cc295161.d6ba8f4a-b8a2-445a-af0b-a267dfade6e1(zh-cn,Expression.10).png 按钮,然后单击“数据绑定”。

  2. 在显示的“创建数据绑定”对话框中的“元素属性”选项卡中,选择“Slider”节点的“Value”属性。

下表根据绑定类型说明了此示例的绑定行为:

绑定类型

结果

OneWay

移动滑块条(源)将更新文本框(目标)。但是,在文本框中输入数值不会移动滑块条。

TwoWay

移动滑块条(源)将更新文本框(目标)。此外,如果在文本框中输入数值,再用鼠标单击文本框外部,则滑块条的位置会改变。

OneWayToSource

如果在文本框(目标)中输入数值,再单击文本框外部,则会移动滑块条(源)。但是,移动滑块条不会更新文本框。

OneTime

在应用程序启动时,滑块条(源)的初始值将更新文本框(目标)。对滑块条所做的后续更改不会更新文本框,而在文本框中输入数值也不会更新滑块条。

Cc295161.7e183f1f-37d8-4dcb-980c-19a5d61ca087(zh-cn,Expression.10).gif返回页首

绑定到外部数据源的方法

工作流程 1:从源绑定到目标

在创建外部数据源之后,可以将该数据源绑定到用户界面控件。有两种方法可以完成此任务:

  • 绑定现有控件   如果文档中已经包含所需的控件,可将数据节点从“项目”面板的“数据”下拖到该控件上,然后在显示的列表中选择“绑定到现有控件”下的控件名称(“将属性绑定到控件”),从而将该控件绑定到数据。

  • 创建新控件   或者,可以将任意数据节点从“项目”面板的“数据”下拖到文档中,再从“选择用于表示此数据字段的控件”部分下显示的列表中选择控件。这种方式将在文档中插入新控件。

无论是决定绑定现有控件还是创建新控件,都会打开“创建数据绑定”对话框,以便您可以选择希望绑定到数据源的字段。例如,如果通过将字符串类型的数据项拖到 TextBox 上来创建绑定,可能需要绑定到此节点的 Text 字段(默认情况下会选择此字段)。也可以单击该对话框中的展开器 Cc295161.81e110f1-4068-4299-957d-0693cea95088(zh-cn,Expression.10).png,指定其他绑定设置。单击“确定”以关闭该对话框并创建绑定。如果数据在设计时可用,应该会用选定字段的值更新该控件。有关说明,请参阅将数据绑定到属性或元素

如果数据项是一个项集合(数组),或者如果数据项与目标的类型不完全匹配,便会打开“创建数据模板”对话框,以便您可以选择用来显示数据的特定控件。有关详细信息,请参阅本主题下文中的“数据模板”。

工作流程 2:从目标绑定到源

尽管前一个工作流程始终从数据源开始并在目标控件结束,但是如果您已经创建控件并且知道要将哪个属性绑定到数据源或另一个控件的属性,则可使这一过程反向进行。此工作流程对于元素到元素的绑定尤其有用。

在“属性”面板中的每个属性值编辑器旁边,都会显示一个“高级属性选项”Cc295161.d6ba8f4a-b8a2-445a-af0b-a267dfade6e1(zh-cn,Expression.10).png 按钮,以用于设置包括数据绑定在内的高级属性选项。单击高级选项菜单上的“数据绑定”,将打开与本主题前文的“工作流程 1”中所述相同的“创建数据绑定”对话框。

Cc295161.7e183f1f-37d8-4dcb-980c-19a5d61ca087(zh-cn,Expression.10).gif返回页首

数据模板

大多数时候,您都需要显示数据源中的项列表。包含项列表的数据项由项目名称中的“(Array)”标识。如果将一个列表节点从“项目”面板中的“数据”下拖动到某个文档中,并从要绑定到的可选控件的列表中选择“ListBox”,便会显示一个名为“创建数据模板”的附加对话框,您可以使用该对话框来设计数据模板。将文本控件绑定到字符串类型的数据项时,也可能会打开此对话框。

数据模板可定义显示数据时所要采用的结构和格式。例如,如果将“ListBox”控件的 ItemsSource 字段绑定到数据源中的联系节点列表,则必须在数据模板中指定此列表中所要包含的字段以及应该指定给每个字段的控件。您可以决定用“TextBlock”来表示名称,用“Image”来表示图像,用(如“IsCurrentMember”)“CheckBox”来显示布尔字段。创建数据模板可确保将连接节点中的数据转换为所需的显示格式。该模板可对控件中显示任意数据的方式进行非常细致的控制。

Cc295161.alert_note(zh-cn,Expression.10).gif说明:

只有“Content”和“ItemsSource”属性支持数据模板。

在“创建数据模板”对话框中,可以选择执行以下操作之一:

  • 对控件使用默认样式设置。如果要绑定到项列表,则最常见的默认样式是一系列文本框。有关详细信息,请参阅 MSDN 上的创建数据模板概述(此链接可能指向英文页面)。如果该控件没有默认模板,则此选项被禁用。

  • 使用项目中已有的当前或预定义数据模板。如果该控件不存在任何适用的数据模板资源,则此选项处于禁用状态。

  • 指定新的数据模板和显示字段。此选项允许您确定模板中所要包含的数据字段以及要指定给每个数据字段的控件类型。您还可以单击针对最顶端项所列控件旁边的下拉箭头,选择用于包容所有字段的容器元素的类型。在下图所示的示例中,如果单击“item”旁边的“StackPanel”的下拉箭头,再选择“Grid”,则数据模板将使用 Grid 而不是 StackPanel 作为项的容器。使用箭头按钮来确定数据字段的显示顺序。如果没有有效的数据绑定,请选中“生成示例数据”复选框,以便您可以在美工板上查看带示例数据的控件,从而确定是否喜欢模板的外观。

通过“预览”窗格来确定您是否喜欢模板的外观。

“创建数据模板”对话框

Cc295161.3db4f515-c88c-40de-9596-421995421dd2(zh-cn,Expression.10).png

数据模板存储为资源。如果要修改现有数据模板,可以在“资源”面板中单击该数据模板旁边的“编辑资源”按钮。Expression Blend 将进入模板编辑模式,并在“对象和时间线”下显示模板的结构。在此编辑模式下,可以向模板中添加控件,并通过“属性”面板来使用数据绑定,以将这些控件的属性绑定到数据源中的新项。

Cc295161.7e183f1f-37d8-4dcb-980c-19a5d61ca087(zh-cn,Expression.10).gif返回页首