如何:控制文本框文本更新源的时间
更新:2007 年 11 月
本主题描述如何使用 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="{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 属性用于处理源更新,因此仅适用于 TwoWay 或 OneWay 绑定。若要使 TwoWay 和 OneWay 绑定生效,源对象需要提供属性更改通知。有关更多信息,可以参见本主题中引用的示例。此外,也可以参见如何:实现属性更改通知。 |