此示例演示如何创建简单的Binding。
在此示例中,假设您具有一个字符串属性名为PersonName的Person对象。Person对象是在名为SDKSample的命名空间中定义的。
下面的示例用值为Joe的PersonName属性来实例化Person对象。这是在Resources部分中完成的,系统会为该对象分配一个x:Key。
xmlns:src="clr-namespace:SDKSample" SizeToContent="WidthAndHeight" Title="Simple Data Binding Sample"> ... ...
若要绑定到PersonName属性,您需执行以下命令:
2、指定绑定源
在数据绑定中,绑定源对象指的是您从其获取数据的对象。本主题描述了指定绑定源的几种不同方法。
如果您要将几个属性绑定到一个通用源,则您需要使用DataContext属性,它能让您方便地建立一个范围,所有数据绑定的属性都在该范围中继承通用源。
在下面的示例中,数据上下文建立在应用程序的根元素上。这允许所有子元素继承该数据上下文。绑定的数据来自自定义数据类NetIncome,可通过映射直接引用该类,已为该类分配了incomeDataSource资源键。
有关完整的代码示例,请参见控制数据流方向和计时的示例。
xmlns:c="clr-namespace:SDKSample" Name="Page1" > 以上示例实例化标记中的对象,并将其用作资源。如果您希望绑定到已在代码中实例化的对象,则需要通过编程方式设置DataContext属性。有关示例,请参见如何:使数据可用于XAML中的绑定。 另外,如果您希望在各个绑定上显式指定源,则可以选择以下属性。这些属性优先于继承的数据上下文。 3、使数据可用于xaml中的绑定 本主题讨论使数据可用于在可扩展应用程序标记语言(XAML)中绑定的不同方式,具体使用哪种方式取决于您的应用程序需要。 如果您具有一个公共语言运行时(CLR)对象,并希望从公共语言运行时(CLR)绑定到该对象,使该对象可用于绑定的一种方式就是将其定义为资源,并为其赋予x:Key。在下面的示例中,假设您具有一个字符串属性名为PersonName的Person对象。Person对象是在名为Person的命名空间中定义的。 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,如下面的示例所示: 如果将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属性。有关完整示例,请参见控制数据流方向和计时的示例。 若要检测源更改(适用于OneWay和TwoWay绑定),则源必须实现一种合适的属性更改通知机制(如INotifyPropertyChanged)。有关INotifyPropertyChanged实现的示例,请参见如何:实现属性更改通知。 对于TwoWay或OneWayToSource绑定,可以通过设置UpdateSourceTrigger 属性来控制源更新计时。有关更多信息,请参见UpdateSourceTrigger。 11绑定到方法 下面的示例演示如何使用ObjectDataProvider绑定到方法。 在本示例中,TemperatureScale是一个类,它有一个方法ConvertTemp,该方法将接收两个参数(一个是double类型,另一个是enum类型TempType),并将给定值从一个温标转换为另一个温标。在下面的示例中,ObjectDataProvider用于实例化TemperatureScale对象。将使用两个指定参数调用ConvertTemp方法。 方法可以作为资源使用,因此您可绑定到其结果。在以下示例中,TextBox的Text属性和ComboBox的SelectedValue绑定到方法的两个参数。用户可借此指定要转换到的温度以及要转换自的温标。请注意,BindsDirectlyToSource设置为true,因为我们要绑定到ObjectDataProvider实例的MethodParameters 属性,而不是绑定到由ObjectDataProvider包装的对象(TemperatureScale对象)的属性。 用户修改TextBox的内容或ComboBox的选定内容时,最后一个Label的Content将更新。 BindsDirectlyToSource="true" UpdateSourceTrigger="PropertyChanged" Converter="{StaticResource doubleToString}"> Path=MethodParameters[1],BindsDirectlyToSource=true}">