WPF的Binding學習筆記 三

2021-07-03 12:05:37 字數 2227 閱讀 9561

在筆記(一)中記了點binding的path相關, 因為binding的帶參構造器就只有path的引數.

所以path是很重要的, 有了path, 即使在沒有指定source的時候, binding也會隨著ui元素樹一層一層往外找datacontext物件, 判斷是否具有相應的path, 有就拿來用.

一, datacontext屬性與binding

筆記(一)中的binding, 除了控制項間的binding, 其他都是在c#**處完成的.

如何在xaml中binding那些在c#中定義的例項呢?

方法之一就是使用datacontext.

1, 準備乙個類

public

class

student

public

string id

public

string name

public

int age

}

2, 例項化, 然後賦值給窗體的datacontext

public

partial

class

window1 : window

}

3, 準備xaml

<

stackpanel

>

<

textblock

text=""

margin

="5"

/>

<

textblock

text=""

margin

="5"

/>

<

textblock

text=""

margin

="5"

/>

stackpanel

>

執行, 出現如下介面

這樣就成功了.

於是我朋友說, 那我直接把窗體自己做自己的datacontext, 然後定義的那些屬性都能找到?

汗, 還真是能找到. 於是他說, 那如果我有多個資料來源要分別binding, 就多準備一些窗體的屬性, 那xaml那邊寫起來就簡單了.

汗, 效果的確是能實現, 其他的不談...

下面來試一下

4, 新增window1的屬性並修改例項化部分的**

public

partial

class

window1 : window

public student stu

}

5, 修改xaml處的binding

<

stackpanel

>

<

textblock

text=""

margin

="5"

/>

<

textblock

text=""

margin

="5"

/>

<

textblock

text=""

margin

="5"

/>

stackpanel

>

f5執行, 成功

當然, 在上述示例中如果使用stackpanel的datacontext的話也行.

看到這裡是否會覺得很奇怪, 好像跟路由事件的冒泡路由很像?

可惜, 冒泡路由是主動的, 而binding才能這麼牛, 只是作為依賴屬性沒顯示指定datacontext的控制項會自動使用其容器的datacontext而已.

測試開始!

還是上面的示例, xaml處給stackpanel指定乙個name="stackpanel", 然後把c#處指定datacontext部分的**修改如下

public

window1()

f5執行, 發現空白一片...因為這些textblock使用的是上一級節點的datacontext, 而stackpanel的datacontext是個string型別, 沒有path想要的...殘念了

突然想到乙個很詭異的情況, 就是datacontext正好就是需要型別, 比如正好是string

那麼就會出現

<

textblock

text=""

margin

="5"

/>

這樣詭異的binding, 此後再遇也就不奇怪啦~

WPF 初步使用Binding

建立乙個繫結類,實現inotifypropertychanged介面 public class notifypropertychange inotifypropertychanged endregion 具體需要繫結的類繼承notifypropertychange 類,其中需要繫結的屬性的set方法...

WPF 基礎繫結 Binding

最簡單的繫結 path 路徑 可以省略,但據說在附加屬性呼叫時省略可能存在錯誤。targetnullvalue 空預設值 當繫結資料為空時設定預設值。updatesourcetrigger 更新資料來源的觸發機制 propertychanged 內容變化 lostfocus 失去焦點 預設 expl...

WPF依賴屬性Binding實現

由於最近一段時間一直沒有做相關方面的東西,導致好多東西都忘了,就乙個依賴屬性繫結還倒騰了一下。特專門把相關的實現方式存留在 xaml部分,其中有一大塊是實現樣式的,如果有需要的可以看看,其實只要把握住這麼個關鍵點就行了,在後台定義依賴屬性,xaml部分一定要記得給窗體name屬性賦值,就比如我這裡給...