在筆記(一)中記了點binding的path相關, 因為binding的帶參構造器就只有path的引數.
所以path是很重要的, 有了path, 即使在沒有指定source的時候, binding也會隨著ui元素樹一層一層往外找datacontext物件, 判斷是否具有相應的path, 有就拿來用.
一, datacontext屬性與binding
筆記(一)中的binding, 除了控制項間的binding, 其他都是在c#**處完成的.
如何在xaml中binding那些在c#中定義的例項呢?
方法之一就是使用datacontext.
1, 準備乙個類
public2, 例項化, 然後賦值給窗體的datacontextclass
student
public
string id
public
string name
public
int age
}
public3, 準備xamlpartial
class
window1 : window
}
<執行, 出現如下介面stackpanel
>
<
textblock
text=""
margin
="5"
/>
<
textblock
text=""
margin
="5"
/>
<
textblock
text=""
margin
="5"
/>
stackpanel
>
這樣就成功了.
於是我朋友說, 那我直接把窗體自己做自己的datacontext, 然後定義的那些屬性都能找到?
汗, 還真是能找到. 於是他說, 那如果我有多個資料來源要分別binding, 就多準備一些窗體的屬性, 那xaml那邊寫起來就簡單了.
汗, 效果的確是能實現, 其他的不談...
下面來試一下
4, 新增window1的屬性並修改例項化部分的**
public5, 修改xaml處的bindingpartial
class
window1 : window
public student stu
}
<f5執行, 成功stackpanel
>
<
textblock
text=""
margin
="5"
/>
<
textblock
text=""
margin
="5"
/>
<
textblock
text=""
margin
="5"
/>
stackpanel
>
當然, 在上述示例中如果使用stackpanel的datacontext的話也行.
看到這裡是否會覺得很奇怪, 好像跟路由事件的冒泡路由很像?
可惜, 冒泡路由是主動的, 而binding才能這麼牛, 只是作為依賴屬性沒顯示指定datacontext的控制項會自動使用其容器的datacontext而已.
測試開始!
還是上面的示例, xaml處給stackpanel指定乙個name="stackpanel", 然後把c#處指定datacontext部分的**修改如下
publicf5執行, 發現空白一片...因為這些textblock使用的是上一級節點的datacontext, 而stackpanel的datacontext是個string型別, 沒有path想要的...殘念了window1()
突然想到乙個很詭異的情況, 就是datacontext正好就是需要型別, 比如正好是string
那麼就會出現
<這樣詭異的binding, 此後再遇也就不奇怪啦~textblock
text=""
margin
="5"
/>
WPF 初步使用Binding
建立乙個繫結類,實現inotifypropertychanged介面 public class notifypropertychange inotifypropertychanged endregion 具體需要繫結的類繼承notifypropertychange 類,其中需要繫結的屬性的set方法...
WPF 基礎繫結 Binding
最簡單的繫結 path 路徑 可以省略,但據說在附加屬性呼叫時省略可能存在錯誤。targetnullvalue 空預設值 當繫結資料為空時設定預設值。updatesourcetrigger 更新資料來源的觸發機制 propertychanged 內容變化 lostfocus 失去焦點 預設 expl...
WPF依賴屬性Binding實現
由於最近一段時間一直沒有做相關方面的東西,導致好多東西都忘了,就乙個依賴屬性繫結還倒騰了一下。特專門把相關的實現方式存留在 xaml部分,其中有一大塊是實現樣式的,如果有需要的可以看看,其實只要把握住這麼個關鍵點就行了,在後台定義依賴屬性,xaml部分一定要記得給窗體name屬性賦值,就比如我這裡給...