在.net中,資料繫結對程式的快速開發提供了乙個便利,像一些列表控制項,combox,listbox,datagridview等,都是通過這種簡單的繫結,來實現批量資料的展示。wpf中的資料繫結又提公升了乙個等級,不但資料庫與ui控制項能繫結,ui控制項與ui控制項的繫結都可以實現,並且繫結到控制項上的屬性也得到了大的擴充套件(以前最常用的繫結屬性是datasource)。
繫結這個詞就告訴我們,應該是把兩個或更多的事或物結合在一起,是的,在wpf中的繫結,是把繫結目標和繫結源(通常是資料集合,物件,元素控制項)結合在一起,這種結合是有選擇的結合,所以在繫結目標和繫結源中,都要先擇出繫結的屬性。舉個例子,我們有乙個下拉列表,有乙個文字框,我們希望選中的下拉項,顯示到文字框中,這時,下拉列表就是乙個繫結源,選中的項就是繫結源屬性,文字框就是繫結目標,text屬性就是繫結目標屬性。要注意的是,繫結源沒有限制,可以是wpf的元素控制項,也可以是乙個集合,可以是物件,可以是xml資料等,但繫結目標中的繫結屬性就有限制了,它必需是依賴項屬性。
在繫結中,繫結源和繫結目標有乙個橋梁,這個橋量是有方向的,這個方向是通過乙個bindingmode列舉來區分的,這個列舉**如下:
public enum bindingmode
// 繫結源和繫結目標雙方觸發更新
twoway = 0,
// 繫結源觸發繫結目標更新
oneway = 1,
//繫結源觸發繫結目標更新一次(只是在初始化的時侯)
onetime = 2,
//繫結目標觸發繫結源更新
onewaytosource = 3,
//預設值,根據控制項來確定是單向還是雙向,一般情況下,可編輯控制項是雙向繫結,不可編輯控制項是單向繫結(即oneway方式)
default = 4,
接下來,先看乙個簡單的元素控制項和元素控制項的繫結。
content是用繫結來實現的,當然lable是繫結目標物件,content就是繫結目標屬性了,繫結源就是elementname=textbox1,繫結源屬性是path=text,由於lable是不可編輯的,所以lable.content的變化只能依據textbox.text了。
上面是通過屬性繫結,**繫結如下:
label1.datacontext = textbox1;
label1.setbinding(label.contentproperty, "text");
接下來,繫結乙個物件,物件生成的類如下:
public class person
int age;
public int age
getreturn age;
setage = value;
string name;
public string name
getreturn name;
setname = value;
接下來,用textbox來顯示這個物件的age屬性,可以承載textbox 的窗裡的構造裡例項化乙個物件:
person = new person();
person.age = 25;
textbox1.datacontext = person;
讓文字框的資料繫結到person這個物件上(也以把person物件繫結到textbox1的父對元素的datacontext上)。
然後把textbox1的text繫結到物件的age上,可以用標籤屬性,也可以用**,分別如下:
textbox1.setbinding(textbox.textproperty, "age")
上面的繫結都比較簡單,有時間要進行比較特別的繫結,那就是繫結源屬性與繫結目標屬性型別不一樣,這樣的話就需要作乙個型別轉換。在窗體上放置乙個label2,它的背景色根據age的變化而變化,小於等20歲為紅色,大於20小於等於50為綠色,大於50為藍色,這如何實現?
首先得構造型別轉換類,在繫結中的轉換,微軟提供了乙個介面ivalueconverter,我們必需實現這個介面,才能實現繫結的型別轉換。轉換定意如下:
[valueconversion(typeof(int), typeof(brush))]
class convertclass : ivalueconverter
public object convert(object value, type targettype, object parameter, cultureinfo culture)
if (targettype != typeof(brush))
return null;
int age = int.parse(value.tostring());
solidcolorbrush scb = brushes.white; ;
if (age <= 20)
scb = brushes.red;
if (age <= 50 && age > 20)
scb = brushes.green;
if (age > 50)
scb = brushes.blue ;
return scb;
public object convertback(object value, type targettype, object parameter, cultureinfo culture)
throw new exception();
這個介面有兩個方法,乙個convert和乙個convertback,即兩個型別的轉換「來」和轉換「去」。
在xaml元素中設定,首先設定乙個windows資源(就類似於例項化乙個convertclass物件一樣)
然後繫結label2:
**實現如下:
binding bd = new binding();
bd.path = new propertypath("age");
bd.converter = new convertclass();
label2.setbinding(label.backgroundproperty, bd);
資料繫結(一)
在.net中,資料繫結對程式的快速開發提供了乙個便利,像一些列表控制項,combox,listbox,datagridview等,都是通過這種簡單的繫結,來實現批量資料的展示。wpf中的資料繫結又提公升了乙個等級,不但資料庫與ui控制項能繫結,ui控制項與ui控制項的繫結都可以實現,並且繫結到控制項...
Flex資料繫結陷阱(一)
flex資料繫結陷阱 常見的誤用和錯誤 當構建flex或者adobe air程式時,將乙個物件的值自動的傳遞給另乙個物件這種處理是資料繫結最常 用並最有用的特徵之一。儘管如此,同時資料繫結會減緩程式的初始化,並且當開發者不是完全理解資料繫結的機制是如何工作的話,會引 起一些開發者意想不到的問題。最好...
WPF 資料繫結例項一
前言 資料繫結的基本步驟 1 先宣告乙個類及其屬性 2 初始化類賦值 3 在c 中把控制項datacontext 物件 4 在介面設計裡,控制項給要繫結的屬性 原理 監聽事件機制,介面改變有textchanged之類的事件,所以改變介面可以同步修改到物件 想讓普通物件實現資料繫結,需要實現inoti...