将 WPF 控件绑定到 .NET Framework 应用程序中的数据
注意
数据集和相关类是 2000 年代初的旧 .NET Framework 技术,使应用程序能够在应用程序与数据库断开连接时处理内存中的数据。 这些方法对于使用户能够修改数据并持续更改回数据库的应用程序特别有用。 虽然数据集已被证明是一项非常成功的技术,但我们建议新的 .NET 应用程序使用 Entity Framework Core。 实体框架提供了一种更自然的方式来将表格数据作为对象模型,并且具有更简单的编程接口。
通过将数据绑定到 WPF 控件,可以向应用程序的用户显示数据。 若要创建这些数据绑定控件,请将项从“数据源”窗口拖动到 Visual Studio 中的 WPF 设计器上。 本主题将介绍一些你可用于创建数据绑定 WPF 应用程序的最常见的任务、工具和类。
有关如何在 Visual Studio 中创建数据绑定控件的一般信息,请参阅在 Visual Studio 中将控件绑定到数据。 有关 WPF 数据绑定的详细信息,请参阅数据绑定概述。
将 WPF 控件绑定到数据所涉及的任务
下表列出了可以通过将项从“数据源”窗口拖到 WPF 设计器来完成的任务。
任务 | 更多信息 |
---|---|
新建数据绑定控件。 将现有控件绑定到数据。 |
将 WPF 控件绑定到数据集 |
创建按父子关系显示相关数据的控件:当用户选择一个控件中的父数据记录时,另一个控件将显示所选记录的相关子数据。 | 在 WPF 应用程序中显示相关数据 |
创建“查找表”,此表根据一个表的外键字段的值显示另一个表中的信息。 | 在 WPF 应用程序中创建查找表 |
将控件绑定到数据库中的图像。 | 将控件绑定到数据库中的图片 |
有效放置目标
只能将“数据源”窗口中的项拖动到 WPF 设计器中的有效放置目标。 有两种主要的有效放置目标:容器和控件。 容器是通常包含控件的用户界面元素。 例如,网格是容器,窗口也是容器。
生成的 XAML 和代码
将“数据源”窗口中的项拖到 WPF 设计器中时,Visual Studio 将生成定义新的数据绑定控件(或将现有控件绑定到数据源)的 XAML。 对于某些数据源,Visual Studio 还将在代码隐藏文件中生成用数据填充数据源的代码。
下表列出了 Visual Studio 为“数据源”窗口中的每种类型的数据源生成的 XAML 和代码。
数据源 | 生成将控件绑定到数据源的 XAML | 生成用数据填充数据源的代码 |
---|---|---|
数据集 | 是 | 是 |
实体数据模型 | 是 | 是 |
服务 | 是 | 否 |
Object | 是 | 否 |
数据集
将表或列从“数据源”窗口拖到设计器中时,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<EntityName>Query
,其中\<EntityName>
是该实体的名称。为包含该控件的 UI 元素创建 Loaded 事件处理程序。 该事件处理程序调用
Get<EntityName>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 内创建该控件。