WPF 用依賴屬性實現乙個連鎖的依賴關係

2021-06-04 06:23:15 字數 1458 閱讀 7773

如果我們要實現:乙個自定義物件o的某個屬性依賴到控制項c1上,同時,當這個物件的這個屬性發生變化時,關注此物件的控制項c2的顯示內容也要改變,這看起來就像是乙個連鎖反應-c2依賴於o,o依賴於c1。

要實現這個功能我們先實現c2依賴於o這一部分。既然o這個物件要讓其他控制項依賴,那麼o必須在自己的屬性發生變化的時候通知其他控制項,因此,這個o物件必須實現inotifypropertychanged介面,示例**如下:

public class employee : inotifypropertychanged

set}

public int age

}在示例**中,當name屬性的值發生變化之後,觸發事件通知依賴於此屬性的物件

假設介面上有乙個txt1文字框,讓文字框的text屬性依賴於employee例項的name屬性的**如下:

employee em;

private void window_loaded(object sender, routedeventargs e)

;bindingoperations.setbinding(txt1, textbox.textproperty, binding);

}如果此時你用另外乙個方法去改變em物件的name屬性,txt1文字框會馬上顯示相應改變的內容。

好,現在實現o依賴於c1部分。

在這個例子裡, 為了讓employee 例項依賴於其他物件的屬性,我們需要為employee建立依賴屬性,在這個例子裡頭及要讓name有能力依賴於另外物件的屬性,要實現這個功能,這個類必須繼承自dependencyobject類。因此我們修改我們的employee類如下:

public class employee : dependencyobject,inotifypropertychanged

set}

public int age

//register the dependency property

public static readonly dependencyproperty nameproperty = dependencyproperty.register("name", typeof(string), typeof(employee));

}同時修改window load 事件內容

private void window_loaded(object sender, routedeventargs e)

;bindingoperations.setbinding(txt1, textbox.textproperty, binding1);

binding binding2 = new binding("text") ;

bindingoperations.setbinding(em, employee.nameproperty, binding2);

}這樣,在txt2中改變字元內容的時候em物件的name屬性也會相應改變,em物件會同時通知txt1改變值。

前台**如下:

乙個依賴項屬性的應用

一種應用方法是使用依賴項屬性代替inotifypropertychanged介面,將介面繫結的資料來源屬性宣告為依賴項屬性,就可以自動更新到介面了,使用了wpf的內建機制,之前有一篇文章寫了乙個例子。今天寫的應用是重寫乙個控制項,新空間使用依賴項屬性來擴充套件wpf內建控制項的功能,不過我的這個控制...

用乙個屬性儲存乙個動態陣列

用乙個屬性儲存乙個動態陣列,可是弄了半天就是存不下來,象imagelist,等可以動態新增的控制項是如何實現儲存的,用動態陣列能實現嗎?請高手指點 如果不需要在設計時賦值,可以用tlist,tstringlist,tobjectlist儲存,然後宣告屬性及訪問方法,以字串為例 private fli...

用WPF 做了乙個簡單的太陽系

這次主要的目的是為了學習它的3d動畫方法,只用了xaml,沒有寫 先是上網查了查行星資料,做了8個大行星和乙個月亮在裡面,不過發現如果真的按實際比例畫的話,太不容易 了,就比如太陽半徑 是地球的109倍,距離更大,近25000倍,在圖上會除了太陽其他都像畫素點那麼小,於是只好把距離按10mkm作為乙...