MSND 教程短片 WPF 18 繫結

2022-03-05 23:19:51 字數 3374 閱讀 2295

繫結在wpf中是乙個重點,也是難點。下面我們通過例子來簡單講講繫結。

我們先畫乙個橢圓,用橢圓的寬來繫結slider控制項的value。

1: 68,51,88,0" name="ellipse1" stroke="black"
2: height="53" verticalalignment="top" fill="blue"
3: width=""/>
4: 40" margin="39,0,51,59" name="slider1"
5:  verticalalignment="bottom" maximum="100" />
通常,每個繫結都具有四個元件:繫結目標物件、目標屬性、繫結源,以及要使用的繫結源中的值的路徑。這裡繫結目標是ellipse1,目標屬性是width,繫結源是slider1,源屬性是value。

執行看效果:

還有雙向、單項繫結等。看下圖。有圖有真相。

oneway 繫結導致對源屬性的更改會自動更新目標屬性,但是對目標屬性的更改不會傳播回源屬性。此繫結型別適用於繫結的控制項為隱式唯讀控制項的情況。例如,您可能繫結到如****自動收錄器這樣的源,或許目標屬性沒有用於進行更改的控制項介面(如表的資料繫結背景色)。如果無需監視目標屬性的更改,則使用 oneway 繫結模式可避免 twoway 繫結模式的系統開銷。

twoway 繫結導致對源屬性的更改會自動更新目標屬性,而對目標屬性的更改也會自動更新源屬性。此繫結型別適用於可編輯窗體或其他完全互動式 ui 方案。大多數屬性都預設為 oneway 繫結,但是一些依賴項屬性(通常為使用者可編輯的控制項的屬性,如 textbox 的 text 屬性和 checkbox 的 ischecked 屬性)預設為 twoway 繫結。確定依賴項屬性繫結在預設情況下是單向還是雙向的程式設計方法是:使用 getmetadata 獲取屬性的屬性元資料,然後檢查 bindstwowaybydefault 屬性的布林值。

onewaytosource 與 oneway 繫結相反;它在目標屬性更改時更新源屬性。乙個示例方案是您只需要從 ui 重新計算源值的情況。

onetime 繫結未在圖中顯示,該繫結會導致源屬性初始化目標屬性,但不傳播後續更改。這意味著,如果資料上下文發生了更改,或者資料上下文中的物件發生了更改,則更改會反映在目標屬性中。如果您使用的資料的當前狀態的快照適於使用,或者這些資料是真正靜態的,則適合使用此繫結型別。如果要使用源屬性中的某個值初始化目標屬性,並且事先不知道資料上下文,則也可以使用此繫結型別。此繫結型別實質上是 oneway 繫結的簡化形式,在源值不更改的情況下可以提供更好的效能。

請注意,若要檢測源更改(適用於 oneway 和 twoway 繫結),則源必須實現一種合適的屬性更改通知機制(如 inotifypropertychanged)。有關 inotifypropertychanged 實現的示例,請參見如何:實現屬性更改通知。

下面我們來看一下繫結中的依賴屬性。

首先我們,新建乙個person.cs類

1: class person:inotifypropertychanged
2:
11:
12:         public string name
13:
15:             set
16:         }
17:         void onpropertychanged(string  property)
18:
24:         }
25:     }
xaml是:

1:
2:
3:             odp"
4:                                 objecttype="">
5:
6:                     hello wpfsystem:string>
7:
8:
9:
10:        50" text=", path=name}"
11:                  horizontalalignment="left" fontsize="36"
12:                  margin="70,42,0,0"
13:                  name="textbox1"
14:                  verticalalignment="top"
15:                  width="226" />
16:        50" text=",

17:                  path=name, updatesourcetrigger=propertychanged}"
18:                  horizontalalignment="left" fontsize="36"
19:                  margin="70,96,0,0"
20:                  name="textbox2"
21:                  verticalalignment="top"
22:                  width="226" />
23:
這裡有兩個textbox,第乙個是改變了文字中的值,不會影響到資料,第二個就會了,因為person實現了inotifypropertychanged介面。第二個textbox的updatesourcetrigger為propertychanged。既當繫結目標屬性更改時,立即更新繫結源。

還有其他三個:

default

繫結目標屬性的預設 updatesourcetrigger 值。多數依賴項屬性的預設值為 propertychanged,而 text 屬性的預設值為 lostfocus。

lostfocus

當繫結目標元素失去焦點時,更新繫結源。

explicit

僅在呼叫 updatesource 方法時更新繫結源。

18 WPF 元素繫結

繫結具有四個組成部分 被繫結目標屬性必須是依賴項屬性 stackpanel slider name slider width 300 value 10 minimum 0 maximum 30 tickfrequency 1 issnaptotickenabled true tickplacemen...

MSDN 教程短片 WPF 8 WPF樣式與資源

在控制項中我們一般可以通過屬性來設定它們的樣式,如果我們要對很多控制項用同一種樣式。該怎麼辦能呢?方法一 就是在每個控制項的屬性中該,顯然這不是一種明智的選擇。那我們就用法二 我們可以在他的父容器裡的style.resource裡設定。因為這樣其他控制項 在同乙個父容器中 也可以訪問到。下面我用de...

MSDN 教程短片 WPF 22 XPS檔案處理

xps介紹 xps文件和word文件差不多,它提供列印功能。可以以瀏覽器的方式開啟。下面我們以乙個例項來了解xps。首先開啟vs,新建乙個wpf專案。在介面上拖入乙個documentviewer控制項和乙個button控制項。documentviewer 控制項用於以已分頁格式檢視 fixeddoc...