將屬性值延遲為資料繫結的值,建立一個中間運算式物件,並在執行階段解釋套用於元素及其繫結的資料上下文。
繫結運算式使用方式
<object property="{Binding}" .../>
-or-
<object property="{Binding bindProp1=value1[, bindPropN=valueN]*}" ...
/>
-or-
<object property="{Binding path}" .../>
-or
<object property="{Binding path[, bindPropN=valueN]*}" .../>
語法註釋
在這些語法中, [] 和 * 不是常值。 它們是標記法的一部分,表示可以使用零或多個 bindProp=值 對,與先前的 bindProp=值 對組合之間用 , 分隔符號分開。
您可以改用 Binding 物件元素的屬性來設定「可以使用繫結延伸設定的繫結屬性」區段中所列的任何屬性。 不過,這不是 Binding的標記延伸使用方式,它只是設定CLR Binding 類別屬性的一般 XAML 處理。 換句話說, <BindingbindProp1="value1"[bindPropN="valueN"]*/> 是物件元素使用方式屬性 Binding 的對等語法,而不是 Binding 運算式使用方式。 若要瞭解 Binding特定屬性的 XAML 屬性使用方式,請參閱 .NET Framework 類別庫中 Binding 相關屬性的「XAML 屬性使用方式」一節。
XAML 值
| 價值觀 | 說明 |
|---|---|
bindProp1, bindPropN |
要設定的 Binding 或 BindingBase 屬性名稱。 並非所有 Binding 屬性都可以使用 Binding 延伸來設定,而且某些屬性只能在 Binding 運算式中使用進一步的巢狀標記延伸來設定。 請參閱「可以使用繫結延伸設定的繫結屬性」一節。 |
value1, valueN |
設定屬性之值的數值。 屬性值的處理最終專屬於所設定之特定 Binding 屬性的類型和邏輯。 |
path |
設定隱含 Binding.Path 屬性的路徑字串。 另請參閱 PropertyPath XAML 語法。 |
未限定的 {Binding}
「繫結運算式使用方式」中顯示的 {Binding} 使用方式會建立具有預設值的 Binding 物件,其中包含初始值的 Binding.Path 為 null。 在許多案例中,這仍然很有用,因為建立的 Binding 可能依賴在執行階段資料內容中設定 Binding.Path 和 Binding.Source 等重要資料繫結屬性。 如需資料內容概念的詳細資訊,請參閱 資料繫結。
隱含路徑
Binding 標記延伸會使用 Binding.Path 作為概念性的「預設屬性」,其中 Path= 不需要出現在運算式中。 如果您使用隱含路徑指定 Binding 運算式,則隱含路徑必須在該運算式中首先出現,接在其後的是任何bindProp=value序列,其中Binding屬性的名稱被指定。 例如:{Binding PathString},其中 PathString 是一個字串,用於評估由標記擴展使用創建的 Binding 中的 Binding.Path 值。 您可以在逗號分隔符號後面附加具有其他具名屬性的隱含路徑,例如, {Binding LastName, Mode=TwoWay}。
可以使用繫結擴展設定的繫結屬性
本主題中顯示的語法使用泛型 bindProp=value 近似值,因為有許多 Binding 或 Binding 的讀寫屬性可以透過 BindingBase 的標記延伸或運算式語法來設定。 它們可以依任何順序設定,但隱含 Binding.Path 除外。 (您可以選擇明確指定 Path=,在此情況下可以依任何順序設定)。 基本上,您可以使用以逗號分隔的 bindProp=value 組,在下列清單中設定零個或多個屬性。
其中數個屬性值需要物件類型,而這些類型不支援從 XAML 文本語法轉換原生類型,因此需要標記擴展才能被設定為屬性值。 請參閱 .NET Framework 類別庫中的 XAML 屬性使用方式一節,以取得每個屬性的詳細資訊。用於 XAML 屬性語法的字串,基本上等同於您在 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: 值 是來自 BindingMode 列舉的常數名稱。 例如:
{Binding Mode=OneWay}。NotifyOnSourceUpdated:布林值,可以是
true或false。 預設值為false。NotifyOnTargetUpdated:布林值,可以是
true或false。 預設值為false。NotifyOnValidationError:布林值,可以是
true或false。 預設值為false。Path:描述資料物件或一般物件模型路徑的字串。 此格式提供數種不同的慣例來遍歷本主題中無法充分描述的物件模型。 請參閱PropertyPath XAML 語法。
RelativeSource:和ElementName、Source互相排斥;這些繫結屬性各自代表一種特定的繫結方法。 請參閱 資料繫結概觀。 需要使用巢狀的RelativeSource MarkupExtension來指定值。
Source:互斥與 RelativeSource 和 ElementName;每個繫結屬性都代表特定的繫結方法。 請參閱 資料繫結概觀。 需要使用巢狀擴展,通常是 StaticResource 標記擴展,引用來自具備索引鍵的資源字典中的物件數據來源。
StringFormat:描述繫結資料的字串格式慣例的字串。 這是相對進階的繫結概念;請參閱 StringFormat的參考頁面。
TargetNullValue:可以設定為運算式中的
bindProp=value字串,但這相依於所傳遞的參數類型。 如果需要傳遞值的參考型別,則需要一個物件參考,例如巢狀 StaticResource 標記延伸。UpdateSourceTrigger: 值 是來自 UpdateSourceTrigger 列舉的常數名稱。 例如:
{Binding UpdateSourceTrigger=LostFocus}。 特定控件對於這個繫結屬性可能會有不同的預設值。 請參閱 UpdateSourceTrigger。ValidatesOnDataErrors:布林值,可以是
true或false。 預設值為false。 請參閱備註。ValidatesOnExceptions:布林值,可以是
true或false。 預設值為false。 請參閱備註。XPath:描述 XML 資料來源之 XMLDOM 路徑的字串。 請參閱 透過使用 XMLDataProvider 和 XPath 查詢繫結至 XML 資料。
以下是無法使用 Binding 標記延伸/{Binding} 運算式表單來設定 Binding 的屬性。
UpdateSourceExceptionFilter:這個屬性需要回調實作的參考。 XAML 語法中無法參考事件處理常式以外的回呼/方法。
ValidationRules:屬性會採用 ValidationRule 物件的泛型集合。 這可以表示為 Binding 物件元素中的屬性元素,但是沒有可供使用的屬性剖析技術,以用於
Binding運算式。 請參閱 ValidationRules的參考主題。
備註
這很重要
就相依屬性優先順序而言,Binding 表示式等同於本機設定的值。 如果您為原本有 Binding 表示式的屬性設定區域值,則 Binding 會被完全移除。 如需詳細資訊,請參閱相依性屬性值優先順序。
本主題未涵蓋基本層級資料繫結的描述。 請參閱 資料繫結概觀。
備註
MultiBinding 和 PriorityBinding 不支援 XAML 延申語法。 您會改用使用方式屬性元素。 請參閱 MultiBinding 和 PriorityBinding的參考主題。
XAML 的布林值不區分大小寫。 例如,您可以指定 {Binding NotifyOnValidationError=true} 或 {Binding NotifyOnValidationError=True}。
牽涉到資料驗證的繫結通常是由明確 Binding 元素指定,而不是作為 {Binding ...} 運算式,而且在運算式中設定 ValidatesOnDataErrors 或 ValidatesOnExceptions 並不常見。 這是因為在運算式表單中無法輕易設定小幫手屬性 ValidationRules。 如需詳細資訊,請參閱 實作繫結驗證。
Binding 是標記延伸。 當需要將屬性值轉義為非字面值或處理常式名稱時,通常會實作標記擴展,這種需求比單純依賴於某些類型或屬性上的型別轉換器更加具有全域性。 XAML 中的所有標記延伸都會在其屬性語法中使用 { 和 } 字元,這是 XAML 處理器辨識標記延伸必須處理字串內容的慣例。 如需詳細資訊,請參閱標記延伸和 WPF XAML。
Binding 是非典型標記延伸,其中 Binding 類別會執行 WPF XAML 實作的延伸功能,也會執行數個與 XAML 無關的其他方法和屬性。 其他成員的目的是讓 Binding 更具彈性且獨立的類別,除了做為 XAML 標記延伸之外,還可以解決許多資料繫結案例。
另請參閱
- Binding
- 資料繫結概觀
- WPF 中的 XAML
- 標記擴展和 WPF XAML