HOW TO:TextBox 文字更新來源時控制
本主題說明如何使用 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}"/>
因此,當使用者輸入文字到 TextBox 時,TextBlock 會顯示相同的文字 (因為來源變更了),如下列範例的螢幕擷取畫面所示:
如果您有對話方塊或使用者可編輯的表單,而且想要將來源更新延到使用者完成欄位編輯並按一下 [確定] 後,您可以將繫結的 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();
注意事項 |
---|
您可以對其他控制項的屬性使用相同的方法,但請記得其他大部分屬性都具有 PropertyChanged 的預設 UpdateSourceTrigger 值。如需詳細資訊,請參閱 UpdateSourceTrigger 屬性頁面。 |
注意事項 |
---|
UpdateSourceTrigger 屬性會處理來源更新,因此僅與 TwoWay 或 OneWayToSource 繫結相關。為了讓 TwoWay 和 OneWayToSource 繫結得以生效,來源物件必須提供屬性變更告知。如需詳細資訊,請參考本主題中引用的範例。此外,您還可以參閱 HOW TO:實作屬性變更通知。 |