我不太清楚ItemsSource和DataContext之间的区别。有人可以解释一下,并用例子来备份吗?我什么时候使用一个或另一个。
我正在阅读文档,它说我可以绑定使用DataContext,但我抛出一个ObservableCollection,没有显示在列表中。如果我在ItemsSource上抛出相同的集合,它可以正常工作。
解决方法
控件(包括ListBox)根本不做任何与DataContext的值。其目的是为数据绑定提供上下文。
假设你有一个ListBox“myList”和一个MyData“myData”。 MyData类型具有属性“People”,类型为ObservableCollection< Person>而Person类型又具有字符串属性“Forename”和“Surname”。
以下所有内容都是等效的:
myList.ItemsSource = myData.People;
要么
myList.DataContext = myData; myList.SetBinding(ItemsControl.ItemsSourceProperty,new Binding("People"));
要么
myList.DataContext = myData.People; myList.SetBinding(ItemsControl.ItemsSourceProperty,new Binding());
通常,虽然在Xaml中配置了绑定,但是将LayoutRoot的DataContext分配给数据对象:
LayoutRoot.DataContext = myData;
你可能有以下Xaml:
<Grid x:Name="LayoutRoot"> <ListBox x:Name="myList" ItemsSource="{Binding People}"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding Forename}" Margin="2" /> <TextBlock Text="{Binding Surname}" Margin="2" /> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox> </Grid>
你会在这里注意几件事情。 “myList”的DataContext根本没有被分配。在这种情况下,控件的祖先树被移动,直到找到一个赋值给DataContext属性的值的祖先。
此外,每个Person实例动态生成的每个ListBoxItem都将该Person实例分配为其DataContext,这是Forename和Surname绑定如何管理。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。