1. 程式人生 > >WPF之Binding類

WPF之Binding類

Binding類:提供對繫結定義的高階訪問,該繫結連線繫結目標物件(通常為 WPF 元素)的屬性和任何資料來源(例如資料庫、XML 檔案,或包含資料的任何物件)。

Mode 屬性:獲取或設定一個值,該值指示繫結的資料流方向。

(Default:使用繫結目標的預設 Mode 值。 每個依賴屬性的預設值都不同。 通常,使用者可編輯的控制元件屬性(如文字框和複選框的控制元件屬性)預設為雙向繫結,而其他大多數屬性預設為單向繫結。 確定依賴屬性繫結在預設情況下是單向還是雙向的程式設計方法是:使用 GetMetadata 獲取屬性的屬性元資料,然後檢查 BindsTwoWayByDefault 屬性的布林值。)
(OneTime:在應用程式啟動或資料上下文更改時,更新繫結目標。 如果你在適合使用當前狀態的快照或資料實際為靜態資料的位置使用資料,則此型別的繫結適合。 如果你想使用源屬性中的某個值來初始化目標屬性,且提前不知道資料上下文,則此型別的繫結也有用。 這是實質上是 OneWay 繫結的一種簡化形式,它在源值不更改的情況下提供更好的效能。)
(OneWay:在更改繫結源(源)時更新繫結目標(目標)。 如果繫結的控制元件為隱式只讀,則此型別的繫結適用。 例如,你可能繫結到股票程式碼等源。 或者可能是未向目標屬性提供控制元件介面來進行更改,例如表的資料繫結背景色。 如果無需監視目標屬性的更改,則使用 OneWay 繫結模式可避免 TwoWay 繫結模式的系統開銷。)
(OneWayToSource:在目標屬性更改時,更新源屬性。)
(TwoWay:導致更改源屬性或目標屬性時自動更新另一方。 此型別的繫結適用於可編輯窗體或其他完整互動式的 UI 方案。)

Path 屬性:獲取或設定繫結源屬性的路徑。

下面的示例演示建立樣式觸發器 ToolTip 報告驗證錯誤訊息。 Setter 的值將繫結到當前的錯誤內容 TextBox ( TextBox 使用樣式) 使用 RelativeSource 屬性。

<Style x:Key="textBoxInError" TargetType="{x:Type TextBox}">
  <Style.Triggers>
    <Trigger Property="Validation.HasError" Value="true">
      <Setter
Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors)[0].ErrorContent}"/> </Trigger> </Style.Triggers>
</Style>

每個繫結通常具有四個元件︰ 繫結目標物件、 目標屬性、 繫結源和要使用的繫結源中的值的路徑。 有關這些資料繫結概念的詳細資訊,請參閱 資料繫結概述。
使用 Path 屬性來指定您想要將繫結到的源值︰

  • 在最簡單的情況下, Path 屬性值是要使用的繫結,如的源物件的屬性的名稱 Path=PropertyName。
  • 可以通過類似於在中使用的語法指定屬性的子屬性 C#。 例如,子句 Path=ShoppingCart.Order 子屬性中設定的繫結
    Order 物件或屬性的 ShoppingCart。
  • 若要將繫結到的附加屬性,將附加的屬性旁的括號。 例如,若要繫結的附加屬性
    DockPanel.Dock, ,語法是 Path=(DockPanel.Dock)。
  • 可以在其中應用索引器的屬性名後面的方括號內指定的屬性的索引器。 例如,子句 Path=ShoppingCart[0]
  • 索引器和子屬性可以混合在 Path 子句; 例如,
  • 在索引器內部,您可以用逗號
    (,) 隔開的多個索引器引數。 可以使用括號指定的每個引數的型別。 例如,可以讓
    Path=”[(sys:Int32)42,(sys:Int32)24]”, ,其中 sys 對映到 System 名稱空間。
  • 當源是一個集合檢視時,可以以斜槓 (/) 指定的當前項。 例如,子句 Path=/ 將繫結設定為檢視中的當前項。
    當源是一個集合時,此語法指定預設集合檢視的當前項。
  • 屬性名和斜槓可以組合以遍歷集合的屬性。 例如,
    Path=/Offices/ManagerName 指定源集合,其中包含的當前項 Offices 也是集合的屬性。
    其當前項是一個物件,包含 ManagerName 屬性。
  • (可選) 一個句點 (.) 路徑可以用於將繫結到當前的源。 例如,
    Text=”{Binding}” 等同於 Text=”{Binding Path=.}”。

Source 屬性:獲取或設定要用作繫結源的物件。

(預設情況下,繫結會繼承由指定的資料上下文 DataContext 如果已設定了一個屬性。 但是, Source 屬性是一種可以顯式設定的源的 Binding 和重寫繼承的資料上下文。 如果您不需要建立在的作用域的功能的多個屬性繼承相同的資料上下文,則可以使用 Source 屬性而不是 DataContext 屬性。
Binding.ElementName 和 Binding.RelativeSource 屬性還允許您設定繫結的源顯式。 但是,這三個屬性之一 ElementName, ,Source, ,和 RelativeSource, 、 都應該每個組繫結,或可能發生衝突。 如果繫結源衝突,此屬性將引發異常。
若要清除此屬性,請將其設定為 DependencyProperty.UnsetValue。)

ElementName 屬性:獲取或設定要用作繫結源物件的元素的名稱。

(相關元素的 Name 屬性或 x:Name Directive 的值。 只有通過 RegisterName 將元素註冊到適當的 NameScope 後,才能在程式碼中引用這些元素。 有關詳細資訊,請參閱 WPF XAML Namescopes。
預設值為 null。)

XPath 屬性:獲取或設定 XPath 查詢,該查詢返回要使用的 XML 繫結源上的值。

(繫結源時 XML 資料而不是 公共語言執行時 (CLR) 物件, XPath 而不是使用屬性 Path 屬性以指示要使用的繫結源中的值的路徑。
通過設定 XPath 屬性,您要建立 XPath 查詢,以便選擇的節點的集合 (System.Xml.XmlElement 和 System.Xml.XmlAttribute 都派生自 System.Xml.XmlNode)。 System.Xml.XmlNode 是 公共語言執行時 (CLR) 物件,這意味著您可以繫結到使用其屬性 Path 屬性。
XmlNode.SelectNodes 方法將處理 XPath 表示式從 XPath 屬性。 XPath 不支援函式。 有關 XPath 表示式的資訊,請參閱 SelectNodes 文件和示例部分中提供的一些示例。)

RelativeSource 屬性:通過指定繫結源相對於繫結目標位置的位置,獲取或設定此繫結源。

(若要將物件的一個屬性繫結到的同一個物件,另一個屬性或在樣式或模板中定義一個繫結,通常使用此屬性。
預設情況下,繫結會繼承由指定的資料上下文 DataContext 如果已設定了一個屬性。 但是, RelativeSource 屬性是一種可以顯式設定的源的 Binding 和重寫繼承的資料上下文。 有關詳細資訊,請參閱 如何︰ 指定繫結源。
Binding.ElementName 和 Binding.Source 屬性還允許您設定繫結的源顯式。 但是,這三個屬性之一 ElementName, ,Source, ,和 RelativeSource, 、 都應該每個組繫結,或可能發生衝突。 如果繫結源衝突,此屬性將引發異常。)

System.Windows.Data.RelativeSource

AncestorLevel屬性:
以 FindAncestor 模式獲取或設定要查詢的上級級別。 使用 1 指示最靠近繫結目標元素的項。
AncestorType屬性:
獲取或設定要查詢的上級節點的型別。
Mode屬性:
獲取或設定 RelativeSourceMode 值,該值描述相對於繫結目標的位置的繫結源的位置。

FindAncestor:引用資料繫結元素的父鏈中的上級。 這可用於繫結到特定型別的上級或其子類。 若要指定 AncestorType 和/或 AncestorLevel,這就是應使用的模式。
PreviousData:允許在當前顯示的資料項列表中繫結上一個資料項(不是包含資料項的控制元件)。
Self:引用正在其上設定繫結的元素,並允許你將該元素的一個屬性繫結到同一元素的其他屬性上。
TemplatedParent:引用應用了模板的元素,其中此模板中存在資料繫結元素。 這類似於設定 TemplateBindingExtension,且僅在 Binding 位於模板內部時適用。

PreviousData屬性:
獲取用於返回一個靜態值 RelativeSource 為構造 PreviousData 模式。
Self屬性:
獲取用於返回一個靜態值 RelativeSource 為構造 Self 模式。
TemplatedParent屬性:
獲取用於返回一個靜態值 RelativeSource 為構造 TemplatedParent 模式。

這裡寫圖片描述
這裡寫圖片描述