1. 程式人生 > >WPF 入門《數據綁定》

WPF 入門《數據綁定》

具體細節 例子 數據綁定 panel 無法 其他屬性 width tac 更新

  簡單而言, 數據綁定是一種關系, 這種關系告訴WPF 從一個源目標對象中提取一些信息, 並且使用該信息設置為目標對象的屬性。目標屬性總是依賴項屬性, 並且通常位於WPF元素中。

  然而, 源對象可以是任何內容, 可是是隨機生成的一個對象、也可以是數據庫的數據對象,或者手動創建的對象。

1.簡單綁定

  為了能夠簡單理解這種綁定關系, 接下來簡單示例, 用一個數值滾動條, 動態修改一個文字的字體大小, 通過綁定的方式。

    <StackPanel>
        <Slider Name="s1" Value="10" Maximum="100"></Slider>

        <TextBlock FontSize="{Binding ElementName=s1,Path=Value}" Text="看著我" ></TextBlock>
    </StackPanel>

  上圖中, TextBlock的字體大小FontSize通過綁定的形式與名稱為s1的元素Value屬性綁定。

註:數據綁定表達式使用了XAML標記擴展, 所以綁定表達式以單詞Binding 開頭。該示例中設置的兩個屬性: ElementName(源對象元素) 和Path(源對象元素中的屬性)。

運行測試效果:

技術分享圖片

綁定錯誤

  WPF不會引發異常來通知與數據綁定相關的問題, 如果指定的元素不存在或錯誤, 不會收到任何提示, 最簡單的只是目標的屬性無法發生改變, 不過, WPF仍然會在輸出窗口顯示其綁定失敗的具體細節。

綁定模式

  在上面的示例中, 只是一個最簡單的綁定, 們可以假設一個環境, 在上面的例子基礎上另外加一個按鈕, 去單獨實現字體的大小設置, 然而拖動條並不會隨著按鈕設置的字體大小而改動。

  但是在實際應用中, 我們甚至會用到的多種綁定模式, 所以在WPF中, 含有5種綁定的模式, 包含在System.Windows.Data.BindingMode枚舉中。

OneWay 當源屬性變化時更新目標屬性
TwoWay 當源數據變化時更新目標屬性, 並且當目標屬性變化時更新源屬性
OneTime 最初根據源屬性值設置目標屬性。然而, 在此之後的所有改變都會被忽略(除非綁定被設定為一個完全不同的對象或者調用BindingExpression.UpdateTarget()方法, 如稍後所介紹的那樣)。通常, 如果知道源屬性不會變化, 可以使用這種模式降低開銷。
OneWayToSource 和OneWay 類似, 但是方向相反。當目標屬性變化時更新源屬性(這看起來有點像向後傳遞),但目標屬性永遠不會更新。
Default 此類綁定依賴於目標屬性。它既可以是雙向的(對於用戶設置的屬性, 如Textbox.Text屬性),也可以是單向的(對於所有其他屬性)。除非明確指定了另外一種模式, 否則所有綁定都使用該方法。

在此, 對於OneTime設置過一次就無效,和默認default模式就不過多介紹, 下面對其他集中進行簡單分析:

技術分享圖片

WPF 入門《數據綁定》