WPF提供了一個(gè)ObservableCollection類,它實(shí)現(xiàn)了一個(gè)暴露了INotifyPropertyChanged的數(shù)據(jù)集合。也就是說我們不需要自己對(duì)每個(gè)單獨(dú)的數(shù)據(jù)實(shí)現(xiàn)INotifyPropertyChanged結(jié)構(gòu)。我們先看看如何實(shí)現(xiàn)一個(gè)簡(jiǎn)單的綁定數(shù)據(jù)集合。
namespace NSLYL
{
public class LYLDataObj
{
public LYLDataObj(string name, string description)
{
this.name = name;
this.description = description;
}
public string Name
{
get { return name; }
set { name = value; }
}
public string Description
{
get { return description; }
set { description = value; }
}
private string name;
private string description;
}
public class LYLDataObjCol : ObservableCollection<LYLDataObj>
{
public LYLDataObjCol()
{
this.Add(new LYLDataObj("Microsot", "Operating System"));
this.Add(new LYLDataObj("Google", "Search"));
}
}
}
代碼很簡(jiǎn)單,基本上就是這樣的一個(gè)模板。然后,我們就可以把LYLDataObjCol綁定到一個(gè)需要多項(xiàng)數(shù)據(jù)的Element之上,比如ListBox、ComboBox等等。
<ListBox ItemsSource="{StaticResource dataObj}" .../>
綁定之后,只要我的LYLDataObjCol對(duì)象發(fā)送了變化,ListBox、ComboBox的數(shù)據(jù)也會(huì)有對(duì)應(yīng)的變化。
到現(xiàn)在,我們已經(jīng)知道在綁定的時(shí)候有兩種指定數(shù)據(jù)源的方式:1、DataContext,關(guān)于它我們在這個(gè)Post有簡(jiǎn)單介紹。2、直接用Binding類的Source屬性。那么,我們?cè)谑褂玫臅r(shí)候如何區(qū)別呢?首先,Source的優(yōu)先級(jí)比DataContext高,只有Source不存在,或者在當(dāng)前Source到不到需要的屬性時(shí)才會(huì)查找DataContext。除此之外,這兩者沒有真正的區(qū)別,只是建議使用Source,它能有助于我們調(diào)試應(yīng)用程序。因?yàn)橥ㄟ^它可以明確的得到Source的信息。而DataContext支持一種繼承。可以在父Element指定Source源。這同時(shí)也成為了DataContext的一個(gè)優(yōu)點(diǎn):如果多個(gè)Element需要綁定同一個(gè)Source源,那么我們只需要在一個(gè)地方指定DataContext,就可以在其子Element使用。
聯(lián)系客服