Ang*_*ker 22 silverlight datacontext itemssource silverlight-4.0
我不太熟悉ItemsSource和DataContext之间的区别.有人能解释一下并用例子来支持吗?我何时会使用其中一个.
我正在阅读文档,它说我可以使用DataContext进行绑定,但是我会在其中抛出一个ObservableCollection,并且列表中没有任何内容.如果我在ItemsSource上抛出相同的集合,它可以正常工作.
Ant*_*nes 44
控件(包括ListBox)根本不对任何值执行任何操作DataContext
.其目的是为数据绑定提供上下文.
让我们假设你有一个ListBox
"myList"和一个MyData
"myData".该MyData
类型具有类型的属性"People",ObservableCollection<Person>
而Person
类型具有字符串属性"Forename"和"Surname".
以下所有内容均相同: -
myList.ItemsSource = myData.People;
Run Code Online (Sandbox Code Playgroud)
要么
myList.DataContext = myData;
myList.SetBinding(ItemsControl.ItemsSourceProperty, new Binding("People"));
Run Code Online (Sandbox Code Playgroud)
要么
myList.DataContext = myData.People;
myList.SetBinding(ItemsControl.ItemsSourceProperty, new Binding());
Run Code Online (Sandbox Code Playgroud)
通常,虽然在Xaml中配置了绑定,但为LayoutRoot的DataContext分配了数据对象: -
LayoutRoot.DataContext = myData;
Run Code Online (Sandbox Code Playgroud)
你可能有以下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>
Run Code Online (Sandbox Code Playgroud)
你会在这里注意几件事.该DataContext
"myList中"是不是在所有分配.在这种情况下,控件的祖先树将被移动,直到找到具有分配给DataContext
属性的值的祖先.
此外,ListBoxItem
为每个Person
实例动态生成的每个实例都将该Person
实例指定为其实例DataContext
,即Forename和Surname绑定的工作方式.
归档时间: |
|
查看次数: |
12715 次 |
最近记录: |