資料繫結(一)

2021-09-04 10:50:43 字數 2943 閱讀 8767

在.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...