2017-07-04 52 views
-2

我有ListBox与集合(发布者)绑定,每个发布者都有一个名称和作者集合,每个作者都有一个名称。那么我怎样才能提供对作者姓名的绑定呢?绑定到其他集合中存在的集合

<TextBlock Text="{Binding name}" Grid.Column="1" Grid.Row="1"></TextBlock> 
<TextBlock Text="{Binding city}" Grid.Column="1" Grid.Row="0"></TextBlock> 

它绑定到出版商的名称和城市。

+0

,如果你有一个项目集合使用ListView和作为的ItemSource在你的视图模型设定对象的ObservableCollection(publlishers?),然后作为ItemTemplate中设置你的textbblocks – miechooy

回答

0
<ListBox ItemsSource="{Binding}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <TextBlock Text="{Binding name}"></TextBlock> 
       <ListBox ItemsSource="{Binding authors}"> 
        <ListBox.ItemTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding name}"></TextBlock> 
         </DataTemplate> 
        </ListBox.ItemTemplate> 
       </ListBox> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

这将显示出版商的名称以及每个出版商的所有作者列表。我认为出版商有一个名为authors属性,返回IEnumerable<Author>

1

像这样提供的Publisher类,或者无论你怎么称呼它,使用具有一个索引公开征集财产公开作者:

<ListBox x:Name="listBox" ItemsSource="{Binding Publishers}" .... /> 

<TextBlock Text="{Binding SelectedItem.Authors[0].Name, ElementName=listBox}" Grid.Column="1" Grid.Row="0"></TextBlock> 

这将显示第一作者的名字指数0

如果要显示所选发行的所有作者,你应该使用一个ItemsControl

<ItemsControl ItemsSource="{Binding SelectedItem.Authors, ElementName=listBox}" 
         Grid.Column="1" Grid.Row="0"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Name}"></TextBlock> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 
+0

嗯它的好,但SelectedItem does not work xD – BlackRock

+0

你是什么意思的“不起作用”? – mm8

+0

我想这 但它不工作,其设在ListBox中的DataTemplate – BlackRock

0

作者将是作为发布者一部分的集合中的元素。

因此,WPF无法“知道”显示哪个作者的名字:有多个。

而不是文本块,可以使用ItemsControl将其ItemsCollection绑定到当前发布者中的作者集合。