在Silverlight中我們經常看到數據綁定源由DataContext或者ItemsSource指定,那么他們之間的區別有哪些呢?
DataContext:從英文字母意思是數據上下文,在Silverlight中某個父級元素設置了DataContext,那么其子元素將可以繼承並且使用DataContext中的屬性。DataContext綁定的數據源可以是實體集合、實體、屬性等。
ItemsSource:其數據源通常是實體集合(多列數據),無法讓其子元素繼承使用。
下面我們以一個實例主要講解DataContext的用法,其中在父級元素Grid設置了一個DataContext屬性綁定實體,該實體內部有一個屬性為實體集合,此實體集合用於Grid的子元素ListBox的ItemsSource屬性綁定。代碼如下:
首先我們看兩個實體,其中一個實體屬性為List<>:
public class ClaModel { public ClaModel() { ClaName = "五年級三班"; ClaInfo = "全校最好的班級,獲得多項榮譽"; StuList = new List<StuModel>() { new StuModel(){StuName="劉三", StuAge=15, StuInfo="他很勤奮"}, new StuModel(){StuName="李四", StuAge=14, StuInfo="他很懶惰"}, new StuModel(){StuName="王五", StuAge=16, StuInfo="他很聰明"} }; } public string ClaName { get; set; } public string ClaInfo { get; set; } public List<StuModel> StuList { get; set; } } public class StuModel { public string StuName { get; set; } public int StuAge { get; set; } public string StuInfo { get; set; } }
其次我們來看Xaml代碼綁定如下:
<UserControl x:Class="SLDataContext.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:SLDataContext" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400"> <!--第一種方式--> <UserControl.Resources> <local:ClaModel x:Key="ClaSource" /> </UserControl.Resources> <Grid x:Name="LayoutRoot" Background="White" DataContext="{StaticResource ClaSource}"> <TextBlock FontWeight="Bold" Width="60" Height="30" Text="{Binding ClaName}" VerticalAlignment="Top" HorizontalAlignment="Left" /> <TextBlock FontStyle="Italic" Width="160" Height="30" Text="{Binding ClaInfo}" VerticalAlignment="Top" Margin="70 0 0 0" HorizontalAlignment="Left" /> <ListBox Height="239" HorizontalAlignment="Left" Name="lbDetail" VerticalAlignment="Top" Width="343" ItemsSource="{Binding StuList}" SelectedValuePath="StuAge" DisplayMemberPath="StuName" Margin="27,61,0,0" /> </Grid> </UserControl>
最后我們看看另外一種后台綁定DataContext的方式。
public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); //第二種方式:也可以用后台代碼綁定DataContext //this.LayoutRoot.DataContext = new ClaModel(); } }
如需源碼請點擊 SLDataContext.zip 下載 ,效果圖如下:

