在 Visual Studio 中将 WPF 控件绑定到数据
通过将数据绑定到 WPF 控件,可以向应用程序的用户显示数据。 若要创建这些数据绑定控件,您可以在 Visual Studio 中将**“数据源”**窗口上的项拖动到 WPF 设计器上。 本主题将介绍一些您可用于创建数据绑定 WPF 应用程序的最常见的任务、工具和类。
有关如何在 Visual Studio 中创建数据绑定控件的一般信息,请参见在 Visual Studio 中将控件绑定到数据。有关 WPF 数据绑定的更多信息,请参见数据绑定概述。
将 WPF 控件绑定到数据所涉及的任务
下表列出了可以通过将项从**“数据源”**窗口拖到 WPF 设计器中来完成的任务。
任务 |
更多信息 |
---|---|
新建数据绑定控件。 将现有控件绑定到数据。 |
|
创建按父子关系显示相关数据的控件:当用户选择一个控件中的父数据记录时,另一个控件将显示所选记录的相关子数据。 |
|
创建一个查找表,此表根据一个表的外键字段的值显示另一个表中的信息。 |
|
将控件绑定到数据库中的图像。 |
有效放置目标
只能将**“数据源”**窗口中的项拖动到 WPF 设计器中的有效放置目标。 有两种主要的有效放置目标:容器和控件。 容器是通常包含控件的用户界面元素。 例如,网格是容器,窗口也是容器。
生成的 XAML 和代码
将**“数据源”**窗口中的项拖到 WPF 设计器中时,Visual Studio 将生成定义新的数据绑定控件(或将现有控件绑定到数据源)的 XAML。 对于某些数据源,Visual Studio 还将在代码隐藏文件中生成用数据填充数据源的代码。
下表列出了 Visual Studio 为**“数据源”**窗口中的每种类型的数据源生成的 XAML 和代码。
数据源 |
生成将控件绑定到数据源的 XAML |
生成用数据填充数据源的代码 |
---|---|---|
数据集 |
是 |
是 |
实体数据模型 |
是 |
是 |
服务 |
是 |
否 |
对象 |
是 |
否 |
数据集
将表或列从**“数据源”**窗口拖到设计器中时,Visual Studio 将生成可执行以下操作的 XAML:
将数据集和新的 CollectionViewSource 添加到将项拖至的容器的资源中。 CollectionViewSource 是可用于导航和显示数据集中的数据的对象。
为控件创建数据绑定。 如果将项拖动到设计器中的一个现有控件上,则 XAML 会将该控件绑定到该项。 如果将项拖动到容器中,则 XAML 将创建为所拖动的项选择的控件,并将该控件绑定到该项。 将在新的 Grid 内创建该控件。
Visual Studio 还将对代码隐藏文件做出以下更改:
- 为包含该控件的 UI 元素创建 Loaded 事件处理程序。 该事件处理程序用数据填充表,从容器的资源中检索 CollectionViewSource,然后使第一个数据项成为当前项。 如果已存在 Loaded 事件处理程序,则 Visual Studio 会将此代码添加到现有的事件处理程序中。
实体数据模型
将实体或实体属性从**“数据源”**窗口拖到设计器中时,Visual Studio 将生成执行以下操作的 XAML:
将新的 CollectionViewSource 添加到将项拖至的容器的资源中。 CollectionViewSource 是可用于导航和显示实体中的数据的对象。
为控件创建数据绑定。 如果将项拖动到设计器中的一个现有控件上,则 XAML 会将该控件绑定到该项。 如果将项拖动到容器中,则 XAML 将创建为所拖动的项选择的控件,并将该控件绑定到该项。 将在新的 Grid 内创建该控件。
Visual Studio 还将对代码隐藏文件做出以下更改:
添加一种新方法,该方法返回对拖动到设计器中的实体(或包含拖动到设计器中的属性的实体)的查询。 该新方法的名称为 Get实体名称Query,其中实体名称 是实体的名称。
为包含该控件的 UI 元素创建 Loaded 事件处理程序。 该事件处理程序调用 Get实体名称Query 方法以用数据填充实体,从容器的资源中检索 CollectionViewSource,然后使第一个数据项成为当前项。 如果已存在 Loaded 事件处理程序,则 Visual Studio 会将此代码添加到现有的事件处理程序中。
服务
将某个服务对象或属性从**“数据源”**窗口拖到设计器中时,Visual Studio 将生成创建数据绑定控件(或将现有控件绑定到该对象或属性)的 XAML。 但是,Visual Studio 不会生成用数据填充代理服务对象的代码。 您必须自己编写此代码。 有关演示如何执行此操作的示例,请参见演练:将 WPF 控件绑定到 WCF 数据服务。
Visual Studio 将生成执行以下操作的 XAML:
将新的 CollectionViewSource 添加到将项拖至的容器的资源中。 CollectionViewSource 是一个对象,它可用于导航和显示服务返回的对象中的数据。
为控件创建数据绑定。 如果将项拖动到设计器中的一个现有控件上,则 XAML 会将该控件绑定到该项。 如果将项拖动到容器中,则 XAML 将创建为所拖动的项选择的控件,并将该控件绑定到该项。 将在新的 Grid 内创建该控件。
对象
将某个对象或属性从**“数据源”**窗口拖到设计器中时,Visual Studio 将生成创建数据绑定控件(或将现有控件绑定到该对象或属性)的 XAML。 但是,Visual Studio 不会生成用数据填充对象的代码。 您必须自己编写此代码。
提示
自定义类必须是公共的且具有默认的无参数构造函数。 它们不能是其语法中具有“dot”的嵌套类。 有关更多信息,请参见 XAML 及 WPF 的自定义类。
Visual Studio 将生成执行以下操作的 XAML:
将新的 CollectionViewSource 添加到将项拖至的容器的资源中。 CollectionViewSource 是可用于导航和显示对象中的数据的对象。
为控件创建数据绑定。 如果将项拖动到设计器中的一个现有控件上,则 XAML 会将该控件绑定到该项。 如果将项拖动到容器中,则 XAML 将创建为所拖动的项选择的控件,并将该控件绑定到该项。 将在新的 Grid 内创建该控件。
请参见
任务
如何:在 Visual Studio 中将 WPF 控件绑定到数据