繫結標記延伸
將屬性值延後以成為資料繫結值,使其建立中繼運算式物件並解譯會在執行階段套用至項目及其繫結的資料內容。
繫結運算式使用方式
<object property="{Binding}" .../>
-or-
<object property="{Binding bindProp1=value1[, bindPropN=valueN]*}" ...
/>
-or-
<object property="{Binding path}" .../>
-or
<object property="{Binding path[, bindPropN=valueN]*}" .../>
語法注意事項
在這些語法中,[] 與 * 都不是常值 (Literal), 它們是標記法的一部分,會指出可以使用的零個或多個 bindProp=value 組,其中會使用 , 做為值組的分隔符號,並有 bindProp=value 做為前置值組。
「可使用繫結延伸進行設定的繫結屬性」一節中列出的所有屬性 (Property) 都可以改用 Binding 物件項目的屬性 (Attribute) 進行設定。 不過,這並不算是真的 Binding 標記延伸的應用,這只是屬性 (Attribute) 的一般 XAML 處理,這些屬性 (Attribute) 會設定 CLR Binding 類別的屬性 (Property)。 換句話說,<Binding bindProp1="value1"[ bindPropN="valueN"]*/> 是 Binding 物件項目用法之屬性的對等語法,而非 Binding 運算式用法。 若要深入了解如何運用特定 Binding 屬性 (Property) 的 XAML 屬性 (Attribute),請參閱 .NET Framework 類別庫中相關 Binding 屬性 (Property) 的「XAML 屬性使用方式」章節。
XAML 值
bindProp1, bindPropN |
要設定之 Binding 或 BindingBase 屬性的名稱。 並非所有 Binding 屬性 (Property) 都可使用 Binding 延伸進行設定,有些屬性 (Property) 只能使用進一步巢狀的標記延伸以 Binding 運算式進行設定。 請參閱「可使用繫結延伸進行設定的繫結屬性」一節。 |
value1, valueN |
要設定給屬性的值。 屬性 (Attribute) 值的處理方式最終需視所要設定之 Binding 屬性 (Property) 的專屬型別與邏輯而定。 |
path |
設定隱含 Binding.Path 屬性 (Property) 的路徑字串。 請參閱PropertyPath XAML 語法。 |
不合格的 {Binding}
「繫結運算式使用方式」中示範的 {Binding} 使用方法會利用預設值建立 Binding 物件,其中包含 null 的初 Binding.Path。 這在許多案例中仍然是相當實用的,因為所建立的 Binding 可能會仰賴索引鍵資料繫結屬性 (Property),例如於執行階段資料內容中設定的 Binding.Path 與 Binding.Source。 如需資料內容概念的詳細資訊,請參閱資料繫結 (WPF)。
隱含路徑
Binding 標記延伸使用 Binding.Path 做為概念上的預設屬性,其中 Path= 不需要出現在運算式中。 如果您使用隱含路徑指定 Binding 運算式,該隱含路徑必須出現在運算式的一開始,位置要優先於任何其他的 bindProp=value 組,其中 Binding 屬性會以名稱指定。 例如:{Binding PathString},其中 PathString 是評估為 Binding.Path (以標記延伸用法建立的 Binding) 之值的字串。 您可以附加具有其他名稱屬性 (Property) 的隱含路徑,並在其後使用逗號做為分隔符號,例如 {Binding LastName, Mode=TwoWay}。
可使用繫結延伸進行設定的繫結屬性
本主題顯示的語法使用泛型 bindProp=value 近似值,因為 BindingBase 或 Binding 有許多讀取/寫入屬性 (Property) 可透過 Binding 標記延伸/運算式語法進行設定。 除了隱含 Binding.Path 以外,這些語法並沒有一定的設定的順序 (您可以選擇是否要明確指定 Path=,在此情況下,可以將其設定為任何順序)。 基本上,您可以使用以逗號分隔的 bindProp=value 組,設定下列清單中的零個或多個屬性 (Property)。
這些屬性 (Property) 值中的幾個值,所需要的物件型別不支援 XAML 中文字語法的原生型別轉換,因此需要標記延伸以便設定為屬性 (Attribute) 值。 如需詳細資訊,請參閱 .NET Framework 類別庫中每一個屬性的「XAML 屬性使用方式」一節。您用於 XAML 屬性 (Attribute) 語法的字串是否需要進一步搭配標記延伸用法,基本上與以 Binding 運算式指定值的方式相同,不過其中有一項例外,在 Binding 運算式中,每一個 bindProp=value 組的前後不需要加上引號。
BindingGroupName:識別可能繫結群組的字串。 相對而言,這算是進階的繫結概念,請參閱 BindingGroupName 的參考頁面。
BindsDirectlyToSource:布林值,可以為 true 或 false。 預設值為 false。
Converter:可以設為運算式中的 bindProp=value 字串,但是不需要值的物件參考,例如 StaticResource 標記延伸。 在此情況下,這個值會是自訂轉換子類別的執行個體。
ConverterCulture:可以設定為運算式中的標準識別項,請參閱 ConverterCulture 的參考主題。
ConverterParameter:可以設定為運算式中的 bindProp=value 字串,但是這需視所傳遞之參數型別而定。 如果對值傳遞參考型別,這種用法就需要物件參考,例如巢狀 StaticResource 標記延伸。
ElementName:與 RelativeSource 和 Source 互斥,這些屬性個別表示特定的繫結方法。 請參閱資料繫結概觀。
FallbackValue:可以設定為運算式中的 bindProp=value 字串,但是這需視所傳遞之值的型別而定。 如果參考型別,則需要物件參考,例如巢狀 StaticResource 標記延伸。
IsAsync:布林值,可以為 true 或 false。 預設值為 false。
Mode:value 為來自 BindingMode 列舉的常數名稱。 例如,{Binding Mode=OneWay}。
NotifyOnSourceUpdated:布林值,可以為 true 或 false。 預設值為 false。
NotifyOnTargetUpdated:布林值,可以為 true 或 false。 預設值為 false。
NotifyOnValidationError:布林值,可以為 true 或 false。 預設值為 false。
Path:描述資料物件路徑或一般物件模型的字串。 這個格式提供多種不同用於周遊物件模型的慣例,在此主題中沒有詳加說明。 請參閱PropertyPath XAML 語法。
RelativeSource:與 ElementName 和 Source 互斥 (Mutually Exclusive),這些繫結屬性中的每個都表示特定的繫結方法。 請參閱資料繫結概觀。 需要使用巢狀 RelativeSource 標記延伸 以指定值。
Source:與 RelativeSource 和 ElementName 互斥,這些屬性個別表示特定的繫結方法。 請參閱資料繫結概觀。 需要使用巢狀延伸,通常是 StaticResource 標記延伸,其參考已編排索引之資源字典中的物件資料。
StringFormat:描述繫結資料之文字格式慣例的字串。 相對而言,這算是進階的繫結概念,請參閱 StringFormat 的參考頁面。
TargetNullValue:可以設定為運算式中的 bindProp=value 字串,但是這需視所傳遞之參數型別而定。 如果對值傳遞參考型別,則需要物件參考,例如巢狀 StaticResource 標記延伸。
UpdateSourceTrigger:value 為來自 UpdateSourceTrigger 列舉的常數名稱。 例如,{Binding UpdateSourceTrigger=LostFocus}。 針對這個繫結屬性,特定的控制項可能會有不同的預設值。 請參閱UpdateSourceTrigger。
ValidatesOnDataErrors:布林值,可以為 true 或 false。 預設值為 false。 請參閱「備註」。
ValidatesOnExceptions:布林值,可以為 true 或 false。 預設值為 false。 請參閱「備註」。
XPath:描述 XML 資料來源中 XMLDOM 的路徑。 請參閱HOW TO:使用 XMLDataProvider 和 XPath 查詢繫結至 XML 資料。
以下是無法使用 Binding 標記延伸 /{Binding} 運算式形式來設定的 Binding 屬性。
UpdateSourceExceptionFilter:此屬性會預期回呼實作的參考。 在 XAML 語法中,不能參考事件處理常式以外的回呼或方法。
ValidationRules:這個屬性 (Property) 採用 ValidationRule 物件的泛型集合。 這可以表示為 Binding 物件項目中的屬性 (Property) 項目,但是在 Binding 運算式中,並沒有現成可以使用的屬性 (Attribute) 剖析技術。 請參閱 ValidationRules 的參考主題。
備註
重要事項 |
---|
就相依性屬性優先順序而言,Binding 運算式相當於本機設定值。如果您為原來具有 Binding 運算式的屬性 (Property) 設定本機值,這個 Binding 將被完全移除。如需詳細資訊,請參閱 相依性屬性值優先順序。 |
本主題並未涵蓋基本層級之資料繫結的描述。 請參閱資料繫結概觀。
注意事項 |
---|
MultiBinding和PriorityBinding不支援XAML擴充語法。您將改用屬性的元素。請參閱 MultiBinding 和 PriorityBinding 的參考主題。 |
XAML 的 Boolean 值不區分大小寫。 例如,您可以指定 {Binding NotifyOnValidationError=true} 或 {Binding NotifyOnValidationError=True}。
資料驗證所牽涉的繫結,一般是由明確 Binding 項目指定,而非使用 {Binding ...} 運算式,而且在運算式中設定 ValidatesOnDataErrors 或 ValidatesOnExceptions 是不常見的。 這是因為無法以運算式形式輕易設定同伴屬性 ValidationRules。 如需詳細資訊,請參閱HOW TO:實作繫結驗證。
Binding 是一種標記延伸。 如果必須將屬性 (Attribute) 值加上逸出符號,以免成為常值或處理常式名稱,而且這項需求必須更全面地實施 (而不是只對特定型別或屬性 (Property) 上的設定型別轉換子 (Type Converter)),則通常會實作標記延伸。 所有 XAML 標記延伸都會在其屬性 (Attribute) 語法中使用 { 與 } 字元,這個慣例讓 XAML 處理器可辨識出某個標記延伸必須處理字串內容。 如需詳細資訊,請參閱標記延伸和 WPF XAML。
Binding 是典型的標記延伸,因為實作 WPF 之 XAML 實作的擴充功能的 Binding 類別,也會實作與 XAML 無關的其他數種方法和屬性。 其他成員的用意在於將 Binding 設定為更多樣化和獨立的類別,不只能夠發揮 XAML 標記延伸功能,還能因應其他許多資料繫結案例。