• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 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 模式。

    這里寫圖片描述
    這里寫圖片描述

    版權聲明:本文為wlarlen原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/wlarlen/article/details/78975380

    智能推薦

    【wpf】Command Binding 命令綁定的使用

    前言 這次講解的命令綁定,主要解決的問題是,為實現MVVM模式進行鋪墊,實現前后臺邏輯的解耦。 我們知道如果Button直接實現Click事件,那么實現的邏輯必然在Window后臺代碼中,為了實現MVVM,我要將業務邏輯放在ViewMode里面,這時需要Command Binding。 Command Binding 使用Command 替換 Click 前臺代碼: 創建CommandB...

    zz - A base class for custom WPF binding markup extensions

    In author's original post, there is one article that describe a base class that you can extend to create some Custom Binding markup extension.    Markup Extension is something like this in ....

    無廢話WPF系列8:綁定Binding及模式

    綁定,就是把一個對象屬性的值綁定在別的對象的屬性上 1. 默認綁定 public class Company {     public string Name { get; set; } }   XAML代碼 后端代碼: 我們把第一個文本框的值改為IBM,并點擊按鈕   這個結果說明,我們綁定到一個普通的UI上時,前端的(綁定的目標)改變會時綁定的...

    《深入淺出WPF》 —— 飛天入地 Binding

    Binding 這一章的內容太多,我把書中重要且核心的部分,再加上自己的理解,通過這一篇博文展示出來,希望大家多支持支持 ~ 用最少的文字來解釋清楚每一行代碼,加油 ! 程序 = 數據 + 算法, 數據一直處于核心地位 但傳統的程序設計都是 UI驅動程序 ,這反而使數據成為被動,如何使數據反變之為 主動 呢? WPF 的核心理念就是 數據驅動UI , 要想讓數據成功真正的核心,必須使用 Bindi...

    WPF——Binding.StringFormat的一些細節

    WPF中Binding的StringFormat一些細節 在為控件綁定屬性時,有時候需要進行一些簡單的格式變換,而不是另建 IValueConverter 將問題復雜化,比如有下述模板類 為了達到的下面的排版效果 前臺代碼可以采用這種方式 然而這種方式存在問題在于使用了多余的控件,為了使代碼更加精簡,對于當前的應用場景——需要為前臺控件綁定屬性用于顯示,然而為了顯示更加清晰...

    猜你喜歡

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    精品国产乱码久久久久久蜜桃不卡