Binding详解
属性
名称 | 说明 | |
---|---|---|
Converter | 获取或设置要使用的转换器。 | |
ConverterCulture | 获取或设置计算转换器要使用的区域性。 | |
ConverterParameter | 获取或设置要传递给 Converter 的参数。 | |
Delay | 在毫秒获取或设置时,,在更新绑定源前等待,在该目标的值更改后。(继承自 BindingBase。) | |
ElementName | 获取或设置要用作绑定源对象的元素的名称。 | |
FallbackValue | 获取或设置当绑定无法返回值时要使用的值。(继承自 BindingBase。) | |
IsAsync | 获取或设置一个值,该值指示Binding是否应异步获取和设置值。 | |
Mode | 获取或设置一个值,该值指示绑定的数据流方向。 | |
NotifyOnSourceUpdated | 获取或设置一个值,该值指示当值从绑定目标传输到绑定源时是否引发SourceUpdated 事件。 | |
NotifyOnTargetUpdated | 获取或设置一个值,该值指示当值从绑定源传输到绑定目标时是否引发TargetUpdated 事件。 | |
NotifyOnValidationError | 获取或设置一个值,该值指示是否对绑定对象引发Error 附加事件。 | |
Path | 获取或设置绑定源属性的路径。 | |
RelativeSource | 通过指定绑定源相对于绑定目标的位置,获取或设置绑定源。 | |
Source | 获取或设置要用作绑定源的对象。 | |
StringFormat | 获取或设置一个字符串,该字符串指定如果绑定值显示为字符串,应如何设置该绑定的格式。(继承自 BindingBase。) | |
UpdateSourceTrigger | 获取或设置一个值,该值确定绑定源更新的执行时间。 | |
ValidatesOnDataErrors | 获取或设置一个值,该值指示是否包含DataErrorValidationRule。 | |
ValidatesOnExceptions | 获取或设置一个值,该值指示是否包含ExceptionValidationRule。 | |
ValidatesOnNotifyDataErrors | 获取或设置一个值,该值指示是否包含NotifyDataErrorValidationRule。 | |
ValidationRules | 获取用于检查用户输入有效性的规则集合。 | |
XPath | 获取或设置一个 XPath查询,该查询返回要使用的 XML 绑定源的值。 |
附加事件
名称 | 说明 | |
---|---|---|
SourceUpdated | 当值从绑定目标传输到绑定源时发生,但只针对NotifyOnSourceUpdated 值设置为 true的绑定。 | |
TargetUpdated | 当值从绑定源传输到绑定目标时发生,但只针对NotifyOnTargetUpdated 值设置为 true的绑定。 |
Binding.SourceUpdated 附加事件
当值从绑定目标传输到绑定源时发生,但只针对 NotifyOnSourceUpdated 值设置为 true 的绑定。
Windows Presentation Foundation(WPF) 在每次更新绑定源或目标时都会引发数据更新事件。在内部,此事件用于通知用户界面(UI):它应该更新,因为绑定数据已更改。请注意,若要让这些事件起作用,并让单向或双向绑定正常工作,您需要使用INotifyPropertyChanged 接口实现您的数据类。有关更多信息,请参见如何:实现属性更改通知。
将绑定中的 NotifyOnTargetUpdated 或 NotifyOnSourceUpdated 属性(或两者)设置为 true。您提供的用于侦听此事件的处理程序必须直接附加到您希望收到更改通知的元素,或者如果您希望在上下文中的任何内容发生变化时得到通知,则附加到整个数据上下文。
下面的示例演示如何设置当目标属性更新时收到通知。
<</SPAN>TextBlockGrid.Row="1"Grid.Column="1"Name="RentText"
Text="{BindingPath=Rent, Mode=OneWay,NotifyOnTargetUpdated=True}"
TargetUpdated="OnTargetUpdated"/>
然后您可以根据 EventHandler 委托(在本示例中为OnTargetUpdated)分配处理程序来处理该事件:
private voidOnTargetUpdated(Object sender, DataTransferEventArgs args)
{
// Handleevent
...
}
Binding.Converter属性
Binding.UpdateSourceTrigger属性
获取或设置一个值,该值确定绑定源更新的执行时间。
UpdateSourceTrigger 值之一。默认值为 Default,它返回目标依赖项属性的默认 UpdateSourceTrigger 值。但是,多数依赖项属性的默认值为 PropertyChanged,而 Text 属性的默认值为 LostFocus。
确定依赖项属性的默认 UpdateSourceTrigger 值的编程方法是使用 GetMetadata 来获取属性的属性元数据,然后检查 DefaultUpdateSourceTrigger属性的值。
TwoWay 或 OneWayToSource 绑定侦听目标属性的更改,并将这些更改传播回源。这称为更新源。通常,只要目标属性进行了更改,就会进行这些更新。这对于复选框和其他简单控件很有用,但不适用于文本字段。每次键击之后进行更新都会降低性能,用户也得不到通常在提交新值之前使用退格键修改键入错误的机会。因此,Text属性的默认 UpdateSourceTrigger 值是 LostFocus,而不是 PropertyChanged。
如果将 UpdateSourceTrigger 值设置为 Explicit,则必须调用 UpdateSource 方法,否则所做的更改不会传播回源。
本主题描述如何使用 UpdateSourceTrigger属性控制绑定源更新的执行时间。本主题使用 TextBox 控件作为示例。
TextBox.Text属性的默认 UpdateSourceTrigger 值为 LostFocus。这意味着如果应用程序的 TextBox 包含数据绑定 TextBox.Text属性,则直到 TextBox 失去焦点(例如,将鼠标移到 TextBox 外单击时),键入到 TextBox 中的文本才能更新源。
如果希望在键入过程中更新源,请将该绑定的 UpdateSourceTrigger 设置为 PropertyChanged。在下面的示例中,TextBox和 TextBlock 的 Text 属性都绑定到同一源属性。将 TextBox 绑定的 UpdateSourceTrigger 属性设置为 PropertyChanged。
<Label>Enter a Name:</Label>
<TextBox>
<TextBox.Text>
<Binding Source="{StaticResourcemyDataSource}"Path="Name"
UpdateSourceTrigger="PropertyChanged"/>
</TextBox.Text>
</TextBox>
<Label>The name youentered:</Label>
<TextBlock Text="{BindingSource={StaticResource myDataSource}, Path=Name}"/>
因此,TextBlock所显示的文本将与用户输入到 TextBox 中的文本相同(因为源发生更改),如该示例的以下屏幕快照所示:
如果您具有一个对话框或用户可编辑的窗体,并且希望将源更新延迟到用户完成字段编辑并单击“确定”之后,则可以将绑定的UpdateSourceTrigger 值设置为 Explicit,如下面的示例所示:
XAML复制<TextBox Name="itemNameTextBox" Text="{Binding Path=ItemName, UpdateSourceTrigger=Explicit}" />
如果将 UpdateSourceTrigger 值设置为 Explicit,则仅当应用程序调用 UpdateSource 方法时,该源值才会发生更改。下面的示例演示如何为 itemNameTextBox 调用UpdateSource:
// itemNameTextBox is aninstance of a TextBox
BindingExpression be =itemNameTextBox.GetBindingexpression_r(TextBox.TextProperty);
be.UpdateSource();
UpdateSourceTrigger 属性用于处理源更新,因此仅适用于TwoWay 或 OneWayToSource 绑定。若要使 TwoWay 和 OneWayToSource 绑定生效,源对象需要提供属性更改通知。有关更多信息,可以参见本主题中引用的示例。此外,也可以参见如何:实现属性更改通知。
Binding.RelativeSource 属性
此属性通常用于将对象的某个属性绑定到该对象的另一个属性,或用于在样式或模板中定义绑定。
默认情况下,如果已设置了DataContext属性,则绑定会继承该属性所指定的数据上下文。但是,RelativeSource属性是一种可以显式设置 Binding 的源和重写继承的数据上下文的方式。有关更多信息,请参见如何:指定绑定源。
此外,使用 Binding.ElementName 和 Binding.Source属性还可以显式设置绑定源。但是,对于每个绑定,只能设置ElementName、Source和 RelativeSource这三个属性中的一个,否则可能发生冲突。如果存在绑定源冲突,则此属性将引发异常。
说明 | ||
---|---|---|
AncestorLevel | 在 FindAncestor 模式中获取或设置要查找的上级节点的级别。使用 1表示与绑定目标元素最近的一个级别。 | |
AncestorType | 获取或设置要查找的上级节点的类型。 | |
Mode | 获取或设置一个 RelativeSourceMode值,该值描述绑定源相对于绑定目标的位置。 | |
PreviousData | 获取一个静态值,该值用于返回为PreviousData 模式构造的 RelativeSource。 | |
Self | 获取一个静态值,该值用于返回为Self 模式构造的 RelativeSource。 | |
TemplatedParent | 获取一个静态值,该值用于返回为TemplatedParent 模式构造的 RelativeSource。 |
RelativeSourceMode枚举
描述相对于绑定目标位置的绑定源的位置。
成员
成员名称 | 说明 | |
---|---|---|
PreviousData | 允许您绑定所显示数据项列表中以前的数据项(不是包含数据项的控件)。 | |
TemplatedParent | 引用应用了模板(其中有数据绑定元素)的元素。这类似于设置 TemplateBindingExtension,并仅当 Binding 在模板中时适用。 | |
Self | 引用您对其设置绑定的元素,并允许您将该元素的一个属性绑定到同一元素中的其他属性。 | |
FindAncestor | 引用数据绑定元素父链中的上级。您可以使用它绑定到特定类型或其子类的上级。如果您要指定 AncestorType 和/或 AncestorLevel,可以使用此模式。 |