天天看點

Silverlight實用竅門系列:47.Silverlight中元素到元素的綁定,以及ObservableCollection和List的使用差別

 問題一:在某一些情況下,我們使用mvvm模式的時候,對于某一個字段(agefield)需要在前台的很多個控件(a、b、c、d、e)進行綁定,但是如何能夠讓我們背景字段名改變的時候能夠非常友善的改變所有使用了這個字段的控件呢?

        回答:使用element to element binding,将agefiled綁定到a控件,然後再讓b、c、d、e控件綁定a控件的使用agefield字段的屬性。

        例如:字段(agefield)的資料是年齡大小,a、b、c、d、e控件分别是ellipse、label、slider、textbox、progressbar,這些字段的width、value或者text值按照正常的做法,這幾個控件都是在mvvm模式下都是綁定的agefield。但是這個字段名在後期代碼維護的時候修改為age了,我們就不得不需要一一修改五個控件的綁定值。如果這幾個控件還分布在不同位置,那麼尋找起來就将更加麻煩。那麼這裡我們就将使用到silverlight 3的一個新特性element to element binding。

        執行個體一:我們在這裡有一個textbox控件tbage,其value值假定綁定到某一個字段,然後我們再添加slider、progressbar、ellipse控件,使用value="{binding text,elementname=tbage,mode=twoway}"這樣的方式将tbage的text值綁定到這幾個控件上。下面我們看源碼如下:

 問題二:為什麼在silverlight中我們更常用observablecollection<t>來作為資料集合綁定到控件中,而不是使用list<t>呢?

        回答:當t繼承于inotifypropertychanged接口的時候,如果t的屬性值發生變化時,observablecollection和list都能夠讓前台ui發生相應的改變。但是當增加一個t的資料行時,list不能及時更新前台ui,而observablecollection能夠将新增的t資料行馬上更新到ui上去。

        執行個體二:我們拖出兩個datagrid控件分别是showlistcity和showobservablecity,然後分别綁定資料list和observable資料,再添加一個按鈕為這兩個資料集合添加集合值。看ui是否變化。下面我們看源碼如下:

      下面是mainpage.xaml.cs代碼

   下面我們來看cityinformation執行個體類代碼如下:

Silverlight實用竅門系列:47.Silverlight中元素到元素的綁定,以及ObservableCollection和List的使用差別
Silverlight實用竅門系列:47.Silverlight中元素到元素的綁定,以及ObservableCollection和List的使用差別