<StackPanel DataContext="{StaticResource Employees1}">
<ListBox ItemsSource="{Binding}" DisplayMemberPath="Name"
IsSynchronizedWithCurrentItem="True"/>
<Label Content="{Binding Path=Count}"/>
<Label Content="{Binding Path=Name}"/>
</StackPanel>
如何解决标签的绑定问题?如何确定第二个标签的内容绑定到Employees1.Count (而不是Employee.Count),而第一个标签绑定到Employee.Name,并与listbox选择进行同步?另外,如果我想将第一个标签绑定到Employee.Count上呢?
(Employee有属性名称(可能还有计数),Employees1是ObservableCollection类型的Employee)。
编辑:所以,这里的问题是为什么第一个标签显示ObservableCollection中的员工数,而第二个标签显示集合中特定员工的名称,即当前在ListBox中选择的那个。显然,第一个标签绑定到整个集合,第二个标签绑定到集合中的特定员工。但是为什么,以及如何控制这种行为。
发布于 2012-12-05 08:39:12
来自MSDN 数据绑定概述,绑定到集合的“当前项指针”一节:
因为WPF仅通过使用视图(指定的视图或集合的默认视图)绑定到集合,所以指向集合的所有绑定都有一个当前项指针。
以及“主细节绑定场景”一节:
这是因为当单个对象(本例中的ContentControl )绑定到集合视图时,它会自动绑定到视图的CurrentItem。
在您的示例中,第二个标签自动绑定到Employees1集合的默认视图的当前项。第一个标签也会像这样绑定,但是由于item对象没有Count
属性,它显然返回到集合本身的Count
属性的绑定。然而,我不知道后一种行为是否在某个地方有记载。
发布于 2012-12-05 07:39:58
正如Blam所说--标签与列表框没有任何关系--我认为您在这里要做的是将员工的observableCollection与属性、计数和名称绑定到列表框中。
要做到这一点,您需要列表框中的ItemsTemplate
<ListBox ItemSource={Binding Employees1}>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Label Content="{Binding Count}" />
<Label Content="{Binding Name}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
发布于 2012-12-05 08:06:00
让我试着回答这些问题。
ObservableCollection有一个属性计数。
至于在第二个标签上得到一个属性,它是在做一些假设。
在其他版本的.NET中,您可能不会得到相同的行为。
不应将显示单个值的控件绑定到集合。
如果要从ListBox中选择选定的项,请参阅此链接
https://stackoverflow.com/questions/13725559
复制