0
<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 并与列表框选择同步?另外,如果我想将第一个标签绑定到 Employee.Count 怎么办?

(Employee 有属性 Name(可能还有 Count),Employees1 是一个 Employee 类型的 ObservableCollection)。


编辑:所以,这里的问题是为什么第一个标签显示 ObservableCollection 中的员工人数,而第二个标签显示集合中特定员工的姓名,即当前在 ListBox 中选择的员工。显然,第一个标签绑定到整个集合,第二个标签绑定到集合中的特定员工。但是为什么,以及如何控制这种行为。

4

3 回答 3

1

从 MSDN Data Binding Overview, Binding To Collections , section "Current Item Pointer":

因为 WPF 仅通过使用视图(您指定的视图或集合的默认视图)绑定到集合,所以到集合的所有绑定都具有当前项指针。

和“主从绑定场景”部分:

这是因为当单例对象(在本例中为 ContentControl)绑定到集合视图时,它会自动绑定到视图的 CurrentItem。

在您的示例中,第二个 Label自动绑定到 Employees1 集合的默认视图的当前项。第一个 Label 也会像这样绑定,但由于 item 对象没有Count属性,它显然会回退到对Count集合本身属性的绑定。但是我不知道后一种行为是否记录在某处。

于 2012-12-05T16:39:12.507 回答
0

正如 Blam 所说-标签与列表框没有关系-我认为您在这里尝试做的是将具有属性 Count 和 Name 的员工的 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-05T15:39:58.230 回答
0

让我试着回答问题。

ObservableCollection 有一个属性 Count。

至于在第二个标签上获得单个属性,它正在做出一些假设。
在其他版本的 .NET 中您可能不会获得相同的行为。
不应将显示单个值的控件绑定到集合。

如果您想从 ListBox 中选择项目,请参阅此链接

在此处输入链接描述

于 2012-12-05T16:06:00.967 回答