{Binding} 標記延伸

注意

新的繫結機制適用於 Windows 10,其已針對效能和開發人員生產力進行最佳化。 請參閱 {x:Bind} 標記延伸

注意

有關在應用程式中透過 {Binding} 使用資料繫結的一般資訊 (以及 {x:Bind}{Binding} 之間的全面比較),請參閱深入瞭解資料繫結

{Binding} 標記延伸是用來將資料繫結控制項上的屬性到來自資料來源的值,例如程式碼。 {Binding} 標記延伸會在 XAML 載入時間轉換成 [繫結] 類別的執行個體。 這個繫結物件會從資料來源上的屬性取得值,並將它推送至控制項上的屬性。 繫結物件可以選擇性地設定為觀察資料來源屬性值的變更,並根據這些變更自行更新。 它也可以選擇性地設定為將變更推送回來源屬性的控制項值。 做為資料繫結目標的屬性必須是相依性屬性。 如需詳細資訊,請參閱相依性屬性概觀

{Binding} 具有與本機值相同的相依性屬性優先順序,而且在命令式程式碼中設定本機值會移除標記中任何 {Binding} 設定的效果。

XAML 屬性用法

<object property="{Binding}" .../>
-or-
<object property="{Binding propertyPath}" .../>
-or-
<object property="{Binding bindingProperties}" .../>
-or-
<object property="{Binding propertyPath, bindingProperties}" .../>
詞彙 描述
propertyPath 指定繫結之屬性路徑的字串。 詳細資訊位於下方的 [屬性路徑] 區段中。
bindingProperties propName=value[, propName=value]*
使用名稱/值配對語法指定的一或多個繫結屬性。
propName 將在繫結物件上設定的屬性的字串名稱。 例如,「轉換器」。
value 將屬性設定為的值。 引數的語法取決於繫結類別的屬性,可以使用下面的 {Binding} 區段進行設定。

屬性路徑

路徑描述您要繫結至的屬性 (來源屬性)。 Path 是位置參數,這表示您可以明確使用參數名稱 ({Binding Path=EmployeeID}),或者您可以將它指定為第一個未命名的參數 ){Binding EmployeeID})。

路徑的類型是屬性路徑,它是一個計算結果為自訂類型或架構類型的屬性或子屬性的字串。 類型可以是,但不一定是 DependencyObject。 屬性路徑中的步驟會以點 (.) 分隔,而且您可以包含多個分隔符號來周遊後續的子屬性。 不論用來實作繫結的物件的程式設計語言為何,都使用點分隔符號。

例如,若要將 UI 繫結至員工物件的名稱屬性,您的屬性路徑可能是「Employee.FirstName」。 如果您要將項目控制項繫結至包含員工相依項目的屬性,則屬性路徑可能是「Employee.Dependents」,而項目控制項的項目範本會負責在「相依項目」中顯示項目。

如果資料來源是集合,則屬性路徑可以依集合中的位置或索引來指定集合中的項目。 例如,「Teams[0].Players」,其中常值「[]」會括住指定集合中第一個項目的「0」。

當使用 ElementName 繫結到現有 DependencyObject 時,您可以使用附加屬性做為屬性路徑的一部分。 若要消除附加屬性的歧義,以便附加屬性名稱中的中間點不被視為屬性路徑中的步驟,請在擁有者限定的附加屬性名稱周圍放置括號;例如,(AutomationProperties.Name)

屬性路徑中間物件在執行階段表示中儲存為 PropertyPath 物件,但大多數情況下不需要與程式碼中的 PropertyPath 物件互動。 您通常可以使用 XAML 來指定所需的繫結資訊。

如需屬性路徑的字串語法、動畫功能區域中的屬性路徑,以及建構 PropertyPath 物件的詳細資訊,請參閱屬性-路徑語法

可以使用 {Binding} 設定之繫結類別的屬性

{Binding} 使用 bindingProperties 預留位置語法進行說明,因為可以在標記延伸中設定繫結的多個讀/寫屬性。 可以使用逗號分隔的 propName=value 配對以任意順序設定屬性。 某些屬性需要沒有類型轉換的類型,因此這些屬性需要以巢狀方式置於 {Binding} 中的自己的標記延伸。

屬性 說明
路徑 請參閱上面的屬性路徑區段。
轉換器 指定繫結引擎所呼叫的轉換器物件。 您可以使用 {StaticResource} 標記延伸在標記中設定轉換器,以從資源字典參考該物件。
ConverterLanguage 指定轉換器要使用的文化特性。 (如果您要設定轉換器。) 文化特性會設定為以標準為基礎的識別碼。 如需詳細資訊,請參閱ConverterLanguage
ConverterParameter 指定可在轉換器邏輯中使用的轉換器參數。 (如果您要設定轉換器。) 大部分轉換器都會使用簡單的邏輯,從傳遞的值取得其所需的所有資訊來轉換,而且不需要 ConverterParameter 值。 ConverterParameter 參數用於更複雜的轉換器實現,這些轉換器實作具有條件邏輯,可關閉 ConverterParameter 中傳遞的內容。 您可以編寫一個使用字串以外的值的轉換器,但這並不常見,請參閱 ConverterParameter 中的備註以獲取更多資訊。
ElementName 透過參考同一 XAML 建構中具有 Name 屬性或 x:Name 屬性的另一個元素來指定資料來源。 這通常用來共用相關值,或使用一個 UI 元素的子屬性來提供另一個元素的特定值,例如在 XAML 控制項範本中。
FallbackValue 指定要在無法解析來源或路徑時顯示的值。
模式 將繫結模式指定為下列其中一個值:「OneTime」、「OneWay」或「TwoWay」。 這些會對應至 BindingMode 列舉的常數名稱。 預設為「OneWay」。 請注意,這與 {x:Bind}的預設不同,也就是「OneTime」。
RelativeSource 透過描述繫結來源相對於繫結目標位置的位置來指定資料來源。 這最常用於 XAML 控制項範本內的繫結。 設定 {RelativeSource} 標記延伸
來源 指定物件資料來源。 在繫結標記延伸功能中,來源屬性需要物件參考,例如 {StaticResource} 標記延伸參考。 如果未指定此屬性,則使用中資料內容會指定來源。 更典型的做法是不在單一繫結中指定來源值,而是依賴多個繫結的共用 DataContext。 如需詳細資訊,請參閱 DataContext深入瞭解資料繫結
TargetNullValue 指定當來源值解析但明確為 null 時要顯示的值。
UpdateSourceTrigger 指定繫結來源更新的時間。 如果未指定,則預設為 Default

注意:如果您要將標記從 {x:Bind} 轉換為 {Binding},請注意模式屬性預設值的差異。

ConverterConverterLanguageConverterLanguage,都與將繫結來源中的值或類型轉換為與繫結目標屬性相容的類型或值的案例相關。 如需詳細資訊和範例,請參閱深入瞭解資料繫結區段。

注意

從 Windows 10 版本 1607 開始,XAML 架構針對可見度轉換器提供了內建布林值。 轉換器將 true 對應到 Visible 列舉值,將 false 對應到 Collapsed,因此您可以將可見度屬性繫結到布林值,而無需建立轉換器。 若要使用內建轉換器,您應用程式的最低目標 SDK 版本必須為 14393 或更新版本。 若您的應用程式是以舊版 Windows 10 為目標,您就無法使用此轉換器。 如需目標版本的詳細資訊,請參閱版本調適型程式碼 (機器翻譯)。

SourceRelativeSourceElementName 會指定繫結來源,因此它們是互斥的。

訣竅:如果需要為值指定單一大括號 (例如在 PathConverterParameter 中),請在其前面加上反斜線:\{。 或者,將包含需要逸出的大括號的整個字串括在輔助引號集中,例如 ConverterParameter='{Mix}'

範例

<!-- binding a UI element to a view model -->    
<Page ... >
    <Page.DataContext>
        <local:BookstoreViewModel/>
    </Page.DataContext>

    <GridView ItemsSource="{Binding BookSkus}" SelectedItem="{Binding SelectedBookSku, Mode=TwoWay}" ... />
</Page>
<!-- binding a UI element to another UI element -->
<Page ... >
    <Page.Resources>
        <local:S2Formatter x:Key="GradeConverter"/>
    </Page.Resources>

    <Slider x:Name="sliderValueConverter" ... />
    <TextBox Text="{Binding Path=Value, ElementName=sliderValueConverter,
        Mode=OneWay,
        Converter={StaticResource GradeConverter}}"/>
</Page>

第二個範例設定四個不同的繫結屬性:ElementNamePathModeConverter。 在這種情況下,路徑顯示為明確命名為繫結屬性。 路徑被評估為資料繫結來源,該資料繫結來源是同一執行階段物件樹狀結構中的另一個物件,即名為 sliderValueConverterSlider

請注意 Converter 屬性值如何使用另一個標記延伸 {StaticResource} 標記延伸,因此此處有兩個巢狀標記延伸用法。 首先評估內部的,以便一旦獲得資源,繫結就可以使用一個實用的 IValueConverter (一個由資源中的 local:S2Formatter 元素具現化的自訂類別)。

工具支援

在 XAML 標記編輯器中創作 {Binding} 時,Microsoft Visual Studio 中的 Microsoft IntelliSense 會顯示資料內容的屬性。 一旦您輸入「{Binding」,適合路徑的資料內容屬性就會顯示在下拉式清單中。 IntelliSense 也有助於繫結的其他屬性。 若要這樣做,您必須在標記頁面中設定資料內容或設計階段資料內容。 前往定義 (F12) 也可與 {Binding} 搭配使用。 或者,您可以使用 [資料繫結] 對話方塊。