如何:控制文本框文本更新源的时间

更新:2007 年 11 月

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

示例

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

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

<Label>Enter a Name:</Label>
<TextBox>
  <TextBox.Text>
    <Binding Source="{StaticResource myDataSource}" Path="Name"
             UpdateSourceTrigger="PropertyChanged"/>
  </TextBox.Text>
</TextBox>

<Label>The name you entered:</Label>
<TextBlock Text="{Binding Source={StaticResource myDataSource}, Path=Name}"/>

因此,TextBlock 所显示的文本将与用户输入到 TextBox 中的文本相同(因为源发生更改),如该示例的以下屏幕快照所示:

简单数据绑定示例屏幕快照

有关完整示例,请参见简单绑定示例

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

<TextBox Name="itemNameTextBox"
         Text="{Binding Path=ItemName, UpdateSourceTrigger=Explicit}" />

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

Me.itemNameTextBox.GetBindingExpression(TextBox.TextProperty).UpdateSource()
Me.bidPriceTextBox.GetBindingExpression(TextBox.TextProperty).UpdateSource()
// itemNameTextBox is an instance of a TextBox
BindingExpression be = itemNameTextBox.GetBindingExpression(TextBox.TextProperty);
be.UpdateSource();

有关完整示例,请参见显式更新绑定源的示例

说明:

此方法可用于其他控件的属性,但请记住,其他大多数属性的默认 UpdateSourceTrigger 值为 PropertyChanged。有关更多信息,请参见 UpdateSourceTrigger 属性页。

说明:

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

请参见

其他资源

数据绑定示例

数据绑定帮助主题