视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
WPF数据绑定内容简介
2025-09-29 22:33:11 责编:小OO
文档
1、创建简单绑定

此示例演示如何创建简单的Binding。

在此示例中,假设您具有一个字符串属性名为PersonName的Person对象。Person对象是在名为SDKSample的命名空间中定义的。

下面的示例用值为Joe的PersonName属性来实例化Person对象。这是在Resources部分中完成的,系统会为该对象分配一个x:Key。

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:src="clr-namespace:SDKSample"

SizeToContent="WidthAndHeight"

Title="Simple Data Binding Sample">

...

...

若要绑定到PersonName属性,您需执行以下命令:

2、指定绑定源

在数据绑定中,绑定源对象指的是您从其获取数据的对象。本主题描述了指定绑定源的几种不同方法。

如果您要将几个属性绑定到一个通用源,则您需要使用DataContext属性,它能让您方便地建立一个范围,所有数据绑定的属性都在该范围中继承通用源。

在下面的示例中,数据上下文建立在应用程序的根元素上。这允许所有子元素继承该数据上下文。绑定的数据来自自定义数据类NetIncome,可通过映射直接引用该类,已为该类分配了incomeDataSource资源键。

有关完整的代码示例,请参见控制数据流方向和计时的示例。

x:Class="SDKSample.DirectionalBinding"

xmlns:c="clr-namespace:SDKSample"

Name="Page1"

>

以上示例实例化标记中的对象,并将其用作资源。如果您希望绑定到已在代码中实例化的对象,则需要通过编程方式设置DataContext属性。有关示例,请参见如何:使数据可用于XAML中的绑定。

另外,如果您希望在各个绑定上显式指定源,则可以选择以下属性。这些属性优先于继承的数据上下文。

3、使数据可用于xaml中的绑定

本主题讨论使数据可用于在可扩展应用程序标记语言(XAML)中绑定的不同方式,具体使用哪种方式取决于您的应用程序需要。

如果您具有一个公共语言运行时(CLR)对象,并希望从公共语言运行时(CLR)绑定到该对象,使该对象可用于绑定的一种方式就是将其定义为资源,并为其赋予x:Key。在下面的示例中,假设您具有一个字符串属性名为PersonName的Person对象。Person对象是在名为Person的命名空间中定义的。

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:src="clr-namespace:SDKSample"

SizeToContent="WidthAndHeight"

Title="Simple Data Binding Sample">

然后,您可以绑定到XAML中的对象,如下例所示。

不过,如果要绑定到已经创建的对象,则您需要以代码形式设置DataContext,如下例所示。

DataSet myDataSet;

private void OnInit(object sender,EventArgs e)

{

string mdbFile=Path.Combine(AppDataPath,"BookData.mdb");

string connString=string.Format(

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}

myDataSet=new DataSet();

adapter.Fill(myDataSet,"BookTable");

//myListBox is a ListBox control.

//Set the DataContext of the ListBox to myDataSet

myListBox.DataContext=myDataSet;

}

若要查看完整示例,请参见简单绑定示例和绑定到ADO.NET数据集示例。

若要使用XmlDataProvider类访问用于绑定的XML数据,请参见如何:使用XMLDataProvider和XPath查询绑定到XML数据。若要使用ObjectDataProvider类访问用于绑定的XML数据,请参见如何:绑定到XDocument、XElement或LINQ for XML查询结果。

有关要绑定到的数据的不同指定方式的信息,请参见如何:指定绑定源。有关您可以绑定到的数据类型及如何实现自己的公共语言运行时(CLR)对象以用于绑定的信息,请参见绑定源概述。

4、控制文本框文本更新源的时间

本主题描述如何使用UpdateSourceTrigger属性控制绑定源更新的执行时间。本主题使用TextBox控件作为示例。

TextBox.Text属性的默认UpdateSourceTrigger值为LostFocus。这意味着如果应用程序的TextBox包含数据绑定TextBox.Text属性,则直到TextBox 失去焦点(例如,将鼠标移到TextBox外单击时),键入到TextBox中的文本才能更新源。

如果希望在键入过程中更新源,请将该绑定的UpdateSourceTrigger设置为PropertyChanged。在下面的示例中,TextBox和TextBlock的Text属性都绑定到同一源属性。将TextBox绑定的UpdateSourceTrigger属性设置为PropertyChanged。

如果您具有一个对话框或用户可编辑的窗体,并且希望将源更新延迟到用户完成字段编辑并单击“确定”之后,则可以将绑定的UpdateSourceTrigger值设置为Explicit,如下面的示例所示:

Text="{Binding Path=ItemName,UpdateSourceTrigger=Explicit}" />

如果将UpdateSourceTrigger值设置为Explicit,则仅当应用程序调用UpdateSource方法时,该源值才会发生更改。下面的示例演示如何为itemNameTextBox调用UpdateSource:

//itemNameTextBox is an instance of a TextBox

BindingExpression be=

itemNameTextBox.GetBindingExpression(TextBox.TextProperty);

be.UpdateSource();

UpdateSourceTrigger属性用于处理源更新,因此仅适用于TwoWay或OneWay绑定。若要使TwoWay和OneWay绑定生效,源对象需要提供属性更改通知。有关更多信息,可以参见本主题中引用的示例。此外,也可以参见如何:实现属性更改通知。

5、指定绑定的方向

此示例演示如何指定绑定是仅更新绑定目标(目标)属性或绑定源(源)属性,还是同时更新目标属性和源属性。

使用Mode属性指定绑定的方向。以下枚举列表列出了可供绑定更新的选项:

∙无论是目标属性还是源属性,只要发生了更改,TwoWay就会更新目标属性或源属性。

∙OneWay仅当源属性发生更改时更新目标属性。

∙OneTime仅当应用程序启动时或DataContext进行更改时更新目标属性。

∙OneWayToSource在目标属性更改时更新源属性。

∙Default:使用目标属性的默认Mode值。

有关更多信息,请参见BindingMode枚举。

下面的示例演示如何设置Mode属性。有关完整示例,请参见控制数据流方向和计时的示例。

Text="{Binding Path=TotalIncome,Mode=OneTime}"/>

若要检测源更改(适用于OneWay和TwoWay绑定),则源必须实现一种合适的属性更改通知机制(如INotifyPropertyChanged)。有关INotifyPropertyChanged实现的示例,请参见如何:实现属性更改通知。

对于TwoWay或OneWayToSource绑定,可以通过设置UpdateSourceTrigger 属性来控制源更新计时。有关更多信息,请参见UpdateSourceTrigger。

11绑定到方法

下面的示例演示如何使用ObjectDataProvider绑定到方法。

在本示例中,TemperatureScale是一个类,它有一个方法ConvertTemp,该方法将接收两个参数(一个是double类型,另一个是enum类型TempType),并将给定值从一个温标转换为另一个温标。在下面的示例中,ObjectDataProvider用于实例化TemperatureScale对象。将使用两个指定参数调用ConvertTemp方法。

MethodName="ConvertTemp"x:Key="convertTemp">

0Celsius

方法可以作为资源使用,因此您可绑定到其结果。在以下示例中,TextBox的Text属性和ComboBox的SelectedValue绑定到方法的两个参数。用户可借此指定要转换到的温度以及要转换自的温标。请注意,BindsDirectlyToSource设置为true,因为我们要绑定到ObjectDataProvider实例的MethodParameters 属性,而不是绑定到由ObjectDataProvider包装的对象(TemperatureScale对象)的属性。

用户修改TextBox的内容或ComboBox的选定内容时,最后一个Label的Content将更新。

Path="MethodParameters[0]"

BindsDirectlyToSource="true"

UpdateSourceTrigger="PropertyChanged"

Converter="{StaticResource doubleToString}">

SelectedValue="{Binding Source={StaticResource convertTemp},

Path=MethodParameters[1],BindsDirectlyToSource=true}">

Celsius

Fahrenheit

转换器DoubleToString接收一个double类型的数据,并以Convert方向(从绑定资源到绑定目标,绑定目标是Text属性)将其转换为string类型,并以ConvertBack方向将string转换为double。

InvalidationCharacterRule是一个ValidationRule,用于检查无效字符。默认的错误模板是一个围绕在TextBox四周的红色边框,用于在输入值不是一个double类型的值时向用户发出通知。

有关完整的示例,请参见绑定到方法的结果示例。下载本文

显示全文
专题