一對多的關(guān)系
DataContext為上下文,綁定數(shù)據(jù)源
ItemSource取上下文中的某屬性,會一級一級往上找屬性
一般ItemSource的綁定,綁定到Grid/DataGrid一類容器上,底下的控件到這一級找
對比
1.DataContext 一般是一個非集合性質(zhì)的對象,而ItemSource 更期望數(shù)據(jù)源是集合對象
2.DataContext 是 FrameworkElement 類中定義的一個依賴屬性(Dependency property),ItemsSource是 在ItemsControl 類中定義的。所有繼承自FrameworkElement 的類(控件)都可以使用DataContext屬性并給其賦值,但我們只能給ItemsSource賦值為集合對象
3.DataContext不能產(chǎn)生模板,它只能用來篩選出數(shù)據(jù),供其它控件來綁定。而ItemsSource主要作用就是給模板提供數(shù)據(jù)
4.DataContext主要用來抓取一些子元素需要使用的數(shù)據(jù),以保證子元素能夠順利的使用數(shù)據(jù)。ItemsSource不會用來分享數(shù)據(jù),它只是對定義好的元素有效
舉例
后臺
public partial class DataContextAndItemSource : Window
{
public DataContextAndItemSource()
{
InitializeComponent();
ObservableCollection<Student> students = new ObservableCollection<Student>();
students.Add(new Student()
{
Age = 15,
Name = "吳芳",
Sex = "女"
});
students.Add(new Student()
{
Age = 16,
Name = "劉洋",
Sex = "男"
});
//給DataContextAndItemSource的DataContext賦值
DataContext = students;
}
}
前端
<!--ItemsSource綁定后臺DataContext的數(shù)據(jù)-->
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}" CanUserAddRows="False" IsEnabled="False">
<DataGrid.Columns>
<DataGridTextColumn Width="*" Binding="{Binding Name}" Header="名稱" />
<DataGridTextColumn Width="*" Binding="{Binding Age}" Header="年齡" />
</DataGrid.Columns>
</DataGrid>
示例代碼
https://github.com/zLulus/NotePractice/tree/dev3/WPF/WpfDemo/DataContextAndItemSource