操作說明:TextBox 文字更新來源時控制
本主題描述如何使用 UpdateSourceTrigger 屬性,來控制繫結來源更新的時機。 本主題使用 TextBox 控制項作為範例。
範例
TextBox.Text 屬性的 LostFocus 預設值是 UpdateSourceTrigger。 這表示如果應用程式具有內含資料繫結 TextBox.Text 屬性的 TextBox,則您輸入至 TextBox 的文字在 TextBox 失去焦點之前都不會更新來源 (例如,當您點擊 TextBox 時)。
如果您要在輸入時更新來源,請將繫結 UpdateSourceTrigger 設定為 PropertyChanged。 在下列範例中,反白顯示的程式碼行顯示 TextBox 和 TextBlock 的屬性 Text
都繫結至相同的來源屬性。 TextBox 繫結的 UpdateSourceTrigger 屬性會設定為 PropertyChanged。
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:src="clr-namespace:SDKSample"
xmlns:system="clr-namespace:System;assembly=mscorlib"
SizeToContent="WidthAndHeight"
Title="Simple Data Binding Sample">
<Window.Resources>
<ObjectDataProvider x:Key="myDataSource" ObjectType="{x:Type src:Person}">
<ObjectDataProvider.ConstructorParameters>
<system:String>Joe</system:String>
</ObjectDataProvider.ConstructorParameters>
</ObjectDataProvider>
<Style TargetType="{x:Type Label}">
<Setter Property="DockPanel.Dock" Value="Top"/>
<Setter Property="FontSize" Value="12"/>
</Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Width" Value="100"/>
<Setter Property="Height" Value="25"/>
<Setter Property="DockPanel.Dock" Value="Top"/>
</Style>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Width" Value="100"/>
<Setter Property="Height" Value="25"/>
<Setter Property="DockPanel.Dock" Value="Top"/>
</Style>
</Window.Resources>
<Border Margin="25" BorderBrush="Aqua" BorderThickness="3" Padding="8">
<DockPanel Width="200" Height="100">
<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}"/>
</DockPanel>
</Border>
</Window>
因此,如下列範例螢幕擷取畫面所示,TextBlock 會顯示與使用者將文字輸入 TextBox 的相同文字 (因為來源有所變更):
顯示簡單資料繫結的螢幕擷取畫面。
如果有對話方塊或使用者可編輯的表單,而且您想要將延遲來源更新延遲到使用者完成欄位的編輯,然後按一下 [確定],您就可以將繫結的 UpdateSourceTrigger 值設定為 Explicit,如下列範例所示:
<TextBox Name="itemNameTextBox"
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();
Me.itemNameTextBox.GetBindingExpression(TextBox.TextProperty).UpdateSource()
Me.bidPriceTextBox.GetBindingExpression(TextBox.TextProperty).UpdateSource()
注意
您可以將相同的技巧用於其他控制項的屬性,但請記住,大部分其他屬性的 PropertyChanged 預設值為 UpdateSourceTrigger。 如需詳細資訊,請參閱 UpdateSourceTrigger 屬性頁面。
注意
UpdateSourceTrigger 屬性會處理來源更新,因此只會與 TwoWay 或 OneWayToSource 繫結相關。 若要讓 TwoWay 和 OneWayToSource 繫結能夠運作,來源物件必須提供屬性變更通知。 如需詳細資訊,請參考本主題中引用的範例。 此外,您還可以參閱實作屬性變更通知。