wpf快速指導3:資料繫結
本文摘要:
1:實體類的繫結;
2:實體類集合的繫結及datatemplate;
3:自定義的實體類集合,如observabledictionary;
4:path的語法;
1:實體類的繫結
理解wpf資料繫結,首先需要理解介面inotifycollectionchanged。
場景1:ui顯示學生資訊,當學生姓名發生改變的時候,就需要實時地表現到ui上。在這種情況下,就需要student這個類實現inotifycollectionchanged介面。如下:
publicclass student : inotifypropertychanged
set }
string lastname;
public
string lastname set }
public student(string firstname, string lastname)
void notify(string propname)
}#region inotifypropertychanged members
public
event propertychangedeventhandler propertychanged;
#endregion
}
可以看到,實體類student需要實現的inotifypropertychanged 介面成員為:public event propertychangedeventhandler propertychanged。當我們在wpf的ui控制項中實現繫結的時候,ui會自動為propertychanged賦值(為ui的控制項物件的onpropertychanged)。其次,需要在屬性set方法中實現呼叫委託變數propertychanged,即如上**片段中的notify。
設計乙個前台介面:
<window
xmlns=""
xmlns:x=""
title="window1"
height="345"
width="490"
>
<
dockpanel
x:name="dockpanel"
>
<
textblock
dockpanel.dock="top"
>
<
textblock
>firstname:
textblock
>
<
textbox
text=""
width="100"
>
textbox
>
<
textblock
>lastname:
textblock
>
<
textbox
text=""
width="100"
>
textbox
>
textblock
>
<
button
x:name="btnview"
dockpanel.dock="bottom"
height="30"
>view
button
>
dockpanel
>
window
>
此介面對應後台檔案:
public partial class window1 : window);}}
以上全部**實現了場景1,同時,我們還會發現,如果在ui中修改了student的firstname或者lastname。則後台**中的student物件的屬性會自動同步變化。
2:實體類集合的繫結及datatemplate
既然對於單個實體類的資料繫結已經實現,那麼有沒有辦法對列表資料,也就是實體類集合進行資料的繫結呢?.net提供了inotifycollectionchanged,任何實現了該介面的集合類,都可以用來滿足如下場景。
場景2:ui顯示學生列表資訊。在後台增加或刪除學生,或修改列表中單個學生的資訊,在前台都能同步顯示。同時,前台修改資料,也能同步反應到繫結源中。
在場景2的**中,使用了observablecollection集合類,這個類就是實現了inotifycollectionchanged介面的乙個集合類。
前台**:
<window
xmlns=""
xmlns:x=""
title="mainwindow"
height="350"
width="525"
>
<
dockpanel
x:name="dockpanel"
>
<
textblock
dockpanel.dock="top"
>
<
textblock
verticalalignment="center"
>firstname:
textblock
>
<
textbox
x:name="tbfirstname"
text=""
width="150"
>
textbox
>
<
textblock
verticalalignment="center"
>lastname:
textblock
>
<
textbox
x:name="tblastname"
text=""
width="150"
>
textbox
>
textblock
>
<
button
dockpanel.dock="bottom"
x:name="addbutton"
>add
button
>
<
listbox
itemssource=""
issynchronizedwithcurrentitem="true"
>
<
listbox.itemtemplate
>
<
datatemplate
>
<
textblock
>
<
textblock
text=""
width="150"
>
textblock
>
<
textblock
text=""
width="150"
>
textblock
>
textblock
>
datatemplate
>
listbox.itemtemplate
>
listbox
>
dockpanel
>
window
>
對應的後台**:
public partial class mainwindow : window;dockpanel.datacontext = students;
}}
以上**片段,實現了場景2的所有功能。在《快速指導2中》提到的datatemplate的作用也體現出來了。可以看到,在後台**中,並沒有為listbox指定任何資料來源,為何listbox仍舊可以自動繫結資料?在wpf中,如果乙個控制項為繫結資料來源,則會自動到父控制項中去找,比如,本示例中,listbox便會自動繫結dockpanel的資料來源。而兩個textbox,則是繫結集合類中的實體類的相關屬性。其預設繫結的是索引為0的元素。
listbox的屬性issynchronizedwithcurrentitem="true"表示,如果集合類中的實體屬性在後台發生變化,則listbox將會在ui中動態顯示變化。
3:自定義的實體類集合,如observabledictionary
4:path的語法
使用 path 屬性可以指定您要繫結到的源值:
練習:
用wpf實現如下的功能
1:有3個員工,每個員工有自己的姓名和年齡等屬性;
2:wpf頁面用列表顯示3個員工詳細資訊;
3:選中列表中的一項,能在頁面的下方顯示當前選中員工的詳細資訊,同時這些詳細資訊又是可修改的,修改完畢後,列表中該員工的資訊能動態更新。
wpf 資料繫結
1,資料繫結的幾種方式 重點解釋以下幾點 1,目標物件的屬性是依賴項屬性.2,對於default方式,當目標屬性可以設定時,則是雙向繫結,否則是單向繫結.2,使用 繫結和解除繫結 binding binding new binding binding.source silderfontsize 繫結...
WPF快速指導8 WPF基元素類
wpf快速指導8 wpf基元素類 1 什麼是基元素類 2 基元素類的使用 3 其它重要基類 1 什麼是基元素類 wpf中的大部分類都是從 sdk 文件中通常稱為基元素類的四個類派生而來。這些類包括 uielement frameworkelement contentelement 和 framewo...
WPF資料繫結 用XAML繫結
用xaml繫結 wpf元素不僅是資料繫結的目標,它還可以是繫結的源。可以把乙個wpf元素的源屬性繫結到另乙個wpf元素的目標屬性上。elementname指向繫結源,path指向源屬性 此處checkbox為繫結源,ischecked為源屬性,label為目標 除了用xaml 定義繫結資訊之外,還可...