本主題描述如何使用 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 繫結能夠運作,來源物件必須提供屬性變更通知。 如需詳細資訊,請參考本主題中引用的範例。 此外,您還可以參閱實作屬性變更通知。