WPF快速指導3 資料繫結

2021-09-22 12:10:32 字數 4521 閱讀 1495

wpf快速指導3:資料繫結 

本文摘要:

1:實體類的繫結;

2:實體類集合的繫結及datatemplate;

3:自定義的實體類集合,如observabledictionary; 

4:path的語法;

1:實體類的繫結

理解wpf資料繫結,首先需要理解介面inotifycollectionchanged。

場景1:ui顯示學生資訊,當學生姓名發生改變的時候,就需要實時地表現到ui上。在這種情況下,就需要student這個類實現inotifycollectionchanged介面。如下:

public

class 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 定義繫結資訊之外,還可...