操作說明:TextBox 文字更新來源時控制

本主題描述如何使用 UpdateSourceTrigger 屬性來控制系結來源更新的時機。 本主題使用 TextBox 控制項作為範例。

範例

屬性 TextBox.Text 的預設值 UpdateSourceTriggerLostFocus 。 這表示如果應用程式具有 TextBox 具有資料系結 TextBox.Text 屬性的 ,則您輸入 TextBox 的文字在失去焦點之前 TextBox 不會更新來源(例如,當您按一下遠離 TextBox 時)。

如果您想要在輸入時更新來源,請將系結的 設定 UpdateSourceTriggerPropertyChanged 。 在下列範例中,反白顯示的程式程式碼會顯示 TextTextBlock 的屬性 TextBox 都系結至相同的來源屬性。 系 UpdateSourceTrigger 結的 TextBox 屬性會設定為 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 相同的文字(因為來源變更),如下列範例螢幕擷取畫面所示:

Screenshot that shows simple data binding.

如果您有對話方塊或使用者可編輯的表單,而且您想要延遲來源更新,直到使用者完成編輯欄位,然後按一下 [確定],您可以將系結的值設定 UpdateSourceTriggerExplicit ,如下列範例所示:

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

當您將 UpdateSourceTrigger 值設定為 Explicit 時,來源值只會在應用程式呼叫 UpdateSource 方法時變更。 下列範例示範如何呼叫 UpdateSourceitemNameTextBox

// 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()

注意

您可以將相同的技巧用於其他控制項的屬性,但請記住,大部分其他屬性的預設值 UpdateSourceTriggerPropertyChanged 為 。 如需詳細資訊,請參閱 UpdateSourceTrigger 屬性頁。

注意

屬性 UpdateSourceTrigger 會處理來源更新,因此只會與 TwoWayOneWayToSource 系結相關。 若要 TwoWay 讓 和 OneWayToSource 系結能夠運作,來源物件必須提供屬性變更通知。 如需詳細資訊,請參考本主題中引用的範例。 此外,您還可以參閱實作屬性變更通知

另請參閱