微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

silverlight – ItemsSource和DataContext之间的区别与ListBox有关

我不太清楚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] 举报,一经查实,本站将立刻删除。

相关推荐