gpt4 book ai didi

silverlight - ItemsSource 和 DataContext 之间关于 ListBox 的区别

转载 作者:行者123 更新时间:2023-12-03 11:35:07 24 4
gpt4 key购买 nike

我不太了解 ItemsSource 和 DataContext 之间的区别。有人可以解释它并用例子支持它吗?我什么时候会使用其中一个。

我正在阅读文档,它说我可以使用 DataContext 进行绑定(bind),但是我向它抛出了一个 ObservableCollection,并且列表中没有显示任何内容。如果我在 ItemsSource 中抛出相同的集合,它可以正常工作。

最佳答案

控件(包括列表框)不使用 DataContext 的值做任何事情一点也不。其目的是为数据提供上下文 绑定(bind) .

假设您有一个 ListBox "myList"和 MyData “我的数据”。 MyData type 具有类型为 ObservableCollection<Person> 的属性“People”反过来 Person type 具有字符串属性“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 中配置了绑定(bind),并且为 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>

你会在这里注意到几件事。 DataContext根本没有分配“myList”。在这种情况下,遍历控件的祖先树,直到找到确实具有分配给 DataContext 的值的祖先。属性(property)。

还有每个 ListBoxItem为每个 Person 动态生成实例有 Person实例分配为其 DataContext这就是 Forename 和 Surname 绑定(bind)的工作方式。

关于silverlight - ItemsSource 和 DataContext 之间关于 ListBox 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3169245/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com