WPF學習(8) 元素繫結

2021-09-02 01:57:02 字數 2416 閱讀 2570

資料繫結是wpf區別於之前的winform重要的一點,雖然winform也有資料繫結,但是無疑wpf的資料繫結更加強大,因為wpf引入了依賴屬性,資料繫結就是從源物件中提取資料,然後展示到使用者介面,源物件可以是元素,可以是資料庫中的內容,或者其他的一些資料物件,而其中從元素繫結是最簡單的一種,就是可以直接使用xaml去繫結元素的屬性。

字型大小由slider滑塊來決定

效果很好,拖動滑塊,可以改變字型的大小,接著我們去做另外一件事情,加兩個按鈕,用**去設定slider的value和textblock的fontsize,**如下

字型大小由slider滑塊來決定

修改滑塊的value

修改textblock的fontsize

private void button_click(object sender, routedeventargs e)

private void button_click_1(object sender, routedeventargs e)

發現兩種方式都可以完成工作,但是改變了tb1的fontsize之後,就破壞了繫結,再去拉動滑塊,就沒有任何效果了,這是因為繫結模式的原因,我們只需要把mode更改掉就可以了。

字型大小由slider滑塊來決定

這樣就可以啦,具體的模式一共有五種,oneway,twoway,onetime,onewaytosource,default,具體的區別,可以去查閱官方文件,我覺得還是在不斷實現需求的過程中去積累經驗,來的更有意義。oneway:當源屬性變化時更新目標屬性。twoway:當源屬性更新時更新目標屬性,目標屬性變化時更新源屬性。onewaytosource,當目標屬性更新時改變源屬性。onetime:最初根據源屬性設定目標屬性,然後其後的所有改變都會被忽略。

有一些需求,可能是需要動態繫結,動態生成的一些元素,那麼這個時候就沒辦法直接在xaml裡面繫結,直接使用binding就可以完成,還用上面的例子來說明,**如下。一樣可以達到元素繫結的效果,但是有乙個注意點,就是path由於採用的字串,而且是區分大小寫的,所以一定要正確書寫,否則解析失敗,也不會報錯,會讓人很抓狂的。

binding b = new binding();

b.source = s1;

b.path = new propertypath("value");

b.mode = bindingmode.twoway;

tb1.setbinding(textblock.fontsizeproperty, b);

在我們大部分情況下,需要使用到繫結的時候,可能不是繫結要既有元素的依賴屬性上,而是乙個非元素物件,這個具體實現如下,提供source,就是告訴xaml,我們繫結的源是誰,path就是這個資源的text屬性,告訴我們繫結具體的那個屬性。簡單示例如下。

我是靜態資源mylabletxt對應的值

第二種繫結方式就是使用relativesource ,相對於前面的靜態資源,這個就是相對資源,相對的意思就是對應這某乙個誰,可以是自身,也可以是別人。我最開始的時候,覺得這個相對資源好無聊,應該用不著才對,後來才發現,不僅不無聊,還很有用,比如,我們有個文字,當滑鼠放上去的時候,有個提示框,我們需要讀他的文字,那麼如果不寫後台**,我們就要知道,那麼就需要使用相對資源了。

除了相對他自己本身,還可以相對別的,比如他的上一層物件

選項1

選項2

ancestor這個詞的英文意思是祖先祖宗,所以非常好理解相對源,就是相對於自身,然到某種型別,就是去找到這個型別,然後繫結到他的某個屬性,也就是path上。

第三種,就是用的非常多的資料上下文,datacontext,資料上下文的好處是,當介面上有多個元素或者控制項,需要繫結到某乙個物件時,可以使用資料上下文,這樣,只需要宣告一次,就可以多次繫結,比如以下**

123

而且幾乎所有的元素和控制項都有datacontext,上面這個例子就是grid定義了乙個資料上下文,然後裡面的expander裡面放了好幾個文字框,文字框的內容就是繫結了text,應該是比較好理解的。 最關鍵的是,資料上下文,我們在前面已經知道了,他和路由事件一樣,也是沿著邏輯樹傳遞的,所以這樣就非常靈活,不需要每個元素都去定義資料上下文,找不到就順著邏輯樹乙個個去找啦,而且就算找不到,也最多不顯示,但是不會扔出異常的。當然壞處就是除錯起來沒有原來那麼直觀了。

學習WPF 元素繫結

概念 從源物件提取一些資訊,並用這些資訊設定目標物件的屬性 示例 在給textblock控制項的fontsize屬性賦值時,我們使用了繫結表示式 資料繫結表示式使用xaml的標記擴充套件 因此具有花括號 參見 這裡建立了乙個system.windows.data.binding物件,所以繫結表示式以...

學習WPF 元素繫結

概念 從源物件提取一些資訊,並用這些資訊設定目標物件的屬性 示例 在給textblock控制項的fontsize屬性賦值時,我們使用了繫結表示式 資料繫結表示式使用xaml的標記擴充套件 因此具有花括號 參見 這裡建立了乙個system.windows.data.binding物件,所以繫結表示式以...

WPF學習系列003 2 2 元素和特性

2.2 元素和特性 在 xaml 中定義乙個 xml元素 叫作物件元素 與在 net 中例項化乙個對應的物件 總是使用預設的建構函式 是等價的。xaml 元素 net 物件設定物件元素的乙個特性 attribute 與設定乙個同名屬性 property attribute 稱為屬性特性 或者為乙個同...