WPF之資料繫結總結

2021-06-20 12:09:12 字數 2980 閱讀 4696

最近幾天高強度開發,暴露出不少問題,wpf還達不到信手拈來的地步,好些東西還要去看看以前的專案。平時還是要多總結的,層次高了之後關注的知識點才會更深入。下面總結下wpf的繫結相關,總結之前又看了一遍深入淺出wpf,結合平時用到的得出此文(以textbox為例,覆蓋常見的需求,其他控制項類似,

1.textbox繫結後台的值(一次繫結,類似於賦值);

2.textbox繫結後台的值(可通過改繫結的值自動更新值);

3.textbox繫結另乙個控制項的屬性值(隨時更新值);

4.textbox繫結另乙個控制項的屬性值(雙向更新);

5.textbox繫結資源的值;

6.gridview選擇一行顯示其資訊;

7.其他一些注意點

前台設計頁面:

tbdatafirst:

後台**:

private string _binddata = string.empty;

public string binddata

set}

初始化時:tbdatafirst.datacontext = this;

前台將繫結的邏輯固定,後台給資料來源,這裡後台繫結的源是當前物件,前台獲得當前物件的binddata屬性值;

前台設計頁面:

tbdatasecond:

changetextinfo

後台**:

private string _textboxdata = string.empty;

public string textboxdata

set}

}public event propertychangedeventhandler propertychanged;

public virtual void onpropertychanged(string propertyname)

}private void button_click(object sender, routedeventargs e)

繫結時**:

tbdatasecond.setbinding(textbox.textproperty, 

new binding("textboxdata") );

這裡要注意跟1的區別是這裡能自動更新介面的值,要實現這個功能,則源物件須繼承inotifypropertychanged介面,同時在屬性值改變時觸發通知事件,即onpropertychanged("textboxdata")。這樣每次textboxdata屬性值變化時介面將會自動更新相應的值;

前台設計頁面:

input string:

output string:

這裡全部有前端實現,tboutpnput監控tbinput控制項的文字值,tbinput一有變化則tboutpnput也會跟著變化(但本質是tbinput控制項通知tboutpnput控制項的);

前台設計頁面:

twowayinput string:

twowayoutpnput string:

這裡跟3的區別就在於updatesourcetrigger屬性值設為propertychanged,textbox控制項的預設值是lostfocus;

前台設計頁面:

hello world!

read from resources:

注意這裡需要在前台頁面的windows命名空間加上xmlns:sys="clr-namespace:system;assembly=mscorlib";

這裡內容主要包括:gridview和combobox繫結資料來源(第一次載入時繫結)、textbox和combobox繫結gridview的選擇項的詳細資訊;

前台設計頁面:

name:

levelinfo

繫結資料來源:

private void initdatasource()

注意這裡combobox繫結時要設定displaymemberpath值;

textbox和combobox繫結gridview的選擇項時,由於gridview的選擇項是object的,文字下拉框無法自動獲取其資料,需要自定義轉換幫助類,繼承自ivalueconverter,具體寫法如下(selectitemconverter為例):

[valueconversion(typeof(object), typeof(string))]

public class selectitemconverter : ivalueconverter

public object convertback(object value, type t, object para, cultureinfo culture)

}

這裡是將選擇的項先轉換成student物件然後獲取其name屬性資料,注意設定valueconversion特性,前台頁面相應的引入命名空間以及標記轉換類(詳細請對照原始碼);

7.1前台和後台重複繫結時以後一次的繫結為主(剛開始開始學習時看有的人前台後台都要綁一遍,後來才知道那是重複的);

7.2觸發通知事件時注意在值變化之後觸發,也就是_textboxdata = value;onpropertychanged("textboxdata");不要寫倒了,剛開始學習時也遇過,寫反了之後會導致第一次改變值沒有反應(嘿嘿,其實當時只是依葫蘆畫瓢,沒太理解,才會犯那些錯誤);

7.3如果要繫結的集合也自動更新可以使用observablecollection代替list,前者實現了inotifypropertychanged介面,在集合變化時會自動更新介面;

7.4上面的6其實在有資料驅動的思想,具體各位可以自行學習;

WPF雙向資料繫結總結

參考官方 例項程式 1 指定繫結源 wpf雙向資料同步 目標屬性 ui 和源屬性 cs 資料同步。實現雙向資料同步資料來源需要實現依賴屬性inotifypropertychanged介面,因為依賴屬性有垂直的內嵌變更通知機制。inotifypropertychanged是用於實現介面通知。depen...

WPF用法之資料繫結

非常常見的wpf中資料繫結的方式 宣告乙個繫結 binding binding newbinding 宣告乙個檢視,傳入乙個資料結構 乙個學生類 view collectionviewsource.getdefaultview student 繫結源為這個檢視 binding.source view...

WPF 資料繫結示例總結(1)

也可以選擇為 selectedvalue.content 或者 selectionboxitem 獲取在選擇框中顯示的項。預設字串值 binding.bindsdirectlytosource 屬性 獲取或設定乙個值,該值指示是否計算相對於資料項或 datasourceprovider 物件的 pa...