備註
Windows 10 提供了一種新的繫結機制,該機制針對效能和開發人員生產力進行了最佳化。 請參閱 {x:Bind} 標記延伸模組。
備註
如需在應用程式中使用 {Binding} 的資料繫結的一般資訊 (以及 {x:Bind} 和 {Binding} 之間的全面比較),請參閱 深入資料繫結。
{Binding} 標記延伸模組可用來將控制項上的屬性資料繫結至來自資料來源 (例如程式碼) 的值。 {Binding} 標記延伸模組會在 XAML 載入時轉換成 Binding 類別的實例。 此繫結物件從資料來源上的屬性取得值,並將它推送至控制項上的屬性。 繫結物件可以選擇性地設定為觀察資料來源屬性值的變更,並根據這些變更更新本身。 您也可以選擇性地將其設定為將控制項值的變更推送回來源屬性。 作為資料繫結目標的屬性必須是相依性屬性。 如需詳細資訊,請參閱 相依性屬性概觀。
{Binding} 與本機值具有相同的相依性屬性優先順序,在命令式程式碼中設定本機值會移除標記中設定的任何 {Binding} 的效果。
XAML 屬性使用方式
<object property="{Binding}" .../>
-or-
<object property="{Binding propertyPath}" .../>
-or-
<object property="{Binding bindingProperties}" .../>
-or-
<object property="{Binding propertyPath, bindingProperties}" .../>
| 術語 | Description |
|---|---|
| propertyPath | 指定繫結屬性路徑的字串。 如需詳細資訊,請參閱下方的 「屬性路徑」 區段。 |
| binding屬性 |
propName=值[, propName=值]* 使用名稱/值組語法指定的一或多個繫結屬性。 |
| propName | 要在 Binding 物件上設定的屬性字串名稱。 例如,“轉換器”。 |
| value | 要設定屬性的值。 引數的語法取決於 Binding 類別的屬性,該屬性可以使用下面的 {Binding} 部分進行設定 。 |
屬性路徑
路徑 是您要系結的屬性(來源屬性)。 路徑是位置參數,這表示您可以明確使用參數名稱 ({Binding Path=EmployeeID}),也可以將其指定為第一個未命名的參數 ({Binding EmployeeID})。
Path 的類型是屬性路徑,這是一個用來代表自訂類型或框架類型的屬性或子屬性的字串。 類型可以是 DependencyObject,但不一定需要是 DependencyObject。 各屬性路徑中的步驟會以點(.)分隔,您可以包含多個分隔符號來遍歷連續的子屬性。 無論用來實作所繫結物件的程式設計語言為何,都使用點分隔符號。
例如,若要將 UI 繫結至員工物件的名字屬性,您的屬性路徑可能是 “Employee.FirstName”。 如果您要將項目控制項繫結到包含員工家屬的屬性,您的屬性路徑可能是 “Employee.Dependents”,而項目控制項的項目範本會負責顯示 “Dependents” 中的項目。
如果資料來源是集合,則屬性路徑可以依集合中的位置或索引來指定專案。 例如,「Teams[0]。Players“,其中文字 ”[]“ 會括住指定集合中第一個項目的 ”0“。
使用繫結至現有 DependencyObject 的 ElementName 時,您可以使用附加屬性作為屬性路徑的一部分。 若要消除附加屬性的歧義,使附加屬性名稱中的中間點不會被視為進入屬性路徑,請在擁有者限定的附加屬性名稱周圍加上括弧;例如,(AutomationProperties.Name)。
屬性路徑中繼物件會儲存為執行階段表示法中的 PropertyPath 物件,但大部分的案例不需要在程式碼中與 PropertyPath 物件互動。 您通常可以使用 XAML 指定所需的繫結資訊。
如需屬性路徑字串語法、動畫功能區域中的屬性路徑,以及建構 PropertyPath 物件的詳細資訊,請參閱 屬性路徑語法。
可以使用 {Binding} 設定的 Binding 類別的屬性
{Binding} 會以 bindingProperties 預留位置語法來說明,因為可以在標記延伸模組中設定 Binding 的多個讀取/寫入屬性。 屬性可以以逗號分隔的 propName=值 組以任何順序設定。 某些屬性需要沒有類型轉換的類型,因此這些屬性需要在 {Binding} 中巢狀其自己的標記擴展。
| 房產 | Description |
|---|---|
| 路徑 | 請參閱上方的 屬性路徑 一節。 |
| 轉換器 | 指定繫結引擎所呼叫的轉換器物件。 轉換器可以使用 {StaticResource} 標記延伸模組 設定,以引用資源字典中的該物件。 |
| 轉換器語言 | 指定轉換器要使用的文化特性。 (如果您正在設定 轉換器。)將文化設定為以標準為基礎的識別碼。 如需詳細資訊,請參閱 ConverterLanguage |
| 轉換器參數 | 指定可用於轉換器邏輯的轉換器參數。 (如果您正在設定 轉換器。大多數轉換器使用簡單的邏輯,從傳遞的值中獲取要轉換的所有信息,並且不需要 ConverterParameter 值。 ConverterParameter 參數適用於更複雜的轉換器實作,這些轉換器實作具有條件式邏輯,可鍵控 ConverterParameter 中傳遞的內容。 您可以撰寫使用字串以外的值的轉換器,但這並不常見,如需詳細資訊,請參閱 ConverterParameter 中的備註。 |
| 元素名稱 | 參考相同 XAML 建構中具有 Name 屬性或 x:Name 屬性的另一個元素,以指定資料來源。 這通常用來共用相關值,或使用一個 UI 元素的子屬性來為另一個元素提供特定值,例如在 XAML 控制項範本中。 |
| 回退值 | 指定無法解析來源或路徑時要顯示的值。 |
| 模式 | 指定繫結模式,作為下列其中一個值:「OneTime」、「OneWay」或「TwoWay」。 這些會對應至 BindingMode 列舉的常數名稱。 預設值為「單向」。 請注意,這與 {x:Bind} 的預設值不同,即「OneTime」。 |
| 相對來源 | 描述繫結來源相對於繫結目標位置的位置,以指定資料來源。 這最常用於 XAML 控制項範本內的繫結中。 設定 {RelativeSource} 標記延伸模組。 |
| 源 | 指定物件資料來源。 在 繫結 標記延伸模組中, Source 屬性需要物件參考,例如 {StaticResource} 標記延伸模組 參考。 如果未指定此屬性,則執行資料內容會指定來源。 更常見的做法是不在個別繫結中指定 Source 值,而是依賴共用 DataContext 進行多個繫結。 如需詳細資訊,請參閱 DataContext 或 深入資料繫結。 |
| TargetNull 值 | 指定當來源值解析後結果為 null 時要顯示的值。 |
| UpdateSourceTrigger | 指定繫結來源更新的時間。 如果未指定,則預設值為 預設值。 |
備註
如果您要將標記從 {x:Bind} 轉換成 {Binding},請注意 Mode 屬性預設值的差異。
Converter、 ConverterLanguage 和 ConverterLanguage 都與將值或類型從繫結來源轉換成與繫結目標屬性相容的類型或值的案例相關。 如需詳細資訊和範例,請參閱 深入資料繫結的「資料轉換」一節。
備註
從 Windows 10 版本 1607 開始,XAML 架構提供內建的布林值到可見度轉換器。 轉換器會將 true 對應至 Visible 列舉值,並將 false 對應 至 Collapsed ,因此您可以將 Visibility 屬性系結至布林值,而不需要建立轉換器。 如要使用內建轉換器,應用程式的最低目標 SDK 版本必須為 14393 以上版本。 當您的應用程式以舊版 Windows 10 為目標時,您無法使用它。 如需目標版本的詳細資訊,請參閱 版本調適型程式碼。
Source、 RelativeSource 和 ElementName 會指定繫結來源,因此它們是互斥的。
小提示
如果您需要為值指定單一大括號,例如在 Path 或 ConverterParameter 中,請在其前面加上反斜線: \{。 或者,將包含需要逸出之大括弧的整個字串括在次要引號集中,例如 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>
第二個範例會設定四個不同的 繫結 屬性: ElementName、 Path、 Mode 和 Converter。 在此情況下,路徑被明確命名為 綁定 屬性。
路徑會評估為資料繫結來源,該來源是相同執行階段物件樹狀結構中的另一個物件,即名為 sliderValueConverter 的 。
請注意 Converter 屬性值如何使用另一個標記延伸模組 {StaticResource} 標記延伸模組,因此這裡有兩個巢狀標記延伸模組使用方式。 內部的部分會先被評估,因此一旦資源被取得,就會有一個實際的 IValueConverter(由資源中的 local:S2Formatter 元素實例化的自訂類別),可供繫結使用。
工具支援
Microsoft Visual Studio 中的 Microsoft IntelliSense 會在 XAML 標記編輯器中撰寫 {Binding} 時,顯示資料內容的屬性。 只要您輸入 “{Binding”,下拉式清單中就會顯示適用於 Path 的資料內容屬性。 IntelliSense 也有助於 連結的其他屬性。 若要運作此功能,您必須在標記頁面中設定資料內容或設計階段資料內容。 移至定義 (F12) 也適用於 {Binding}。 或者,您可以使用資料繫結對話方塊。