为嵌套集合中的每个项创建元素



我有一本字典作为电话簿。它使用字母表中的一个字符作为键,并使用一个可观察的类集合作为值。这些类包括像FirstName, LastName等属性。

看起来是这样的

Dictionary<char,ObservableCollection<NameClass>> NameDictionary

目标是能够使用这个字典作为列表框的项源,并将键插入到列表框中,后面跟着每个NameClass。

这是一个精简版本的DataTemplate,我目前有

<DataTemplate x:Key="HeaderTemplate" >
<TextBlock Text="{Binding Key}"/>
<TextBlock Text="{Binding Value}"/>
</DataTemplate>

这是使用DataTemplate和NameDictionary作为源的ListBox。

<ListBox x:Name="NameList"  
Style="{StaticResource ListStyle}" 
ItemContainerStyle="{StaticResource ContainerStyle}" 
ItemsPanel="{StaticResource PanelTemplate}" 
ItemTemplate="{StaticResource HeaderTemplate}"
ItemsSource="{Binding NameDictionary, IsAsync=True}" 
SelectedValue="{Binding ItemIndex}" 
SelectedValuePath="Key">

我目前拥有的xaml将插入键和ObservableCollection到Listbox中,但我希望它插入ObservableCollection中的所有项目,而不是集合本身。

作为一个可视化的例子,我想让一些东西看起来像这样

Char
NameClass.FirstName
NameClass.FirstName
NameClass.FirstName
Char
NameClass.FirstName
NameClass.FirstName
NameClass.FirstName

但是当前插入的是这个

Char
ObservableCollection
Char
ObservableCollection
Char
ObservableCollection

我更喜欢使用xaml,而不是代码。我想这并不太难,如果有任何帮助,我将不胜感激。

Your HeaderTemplate"无法编译,因为它缺少包含多个元素的面板。也就是说,您可以将其修改为托管另一个ListBox,其ItemsSource要绑定到Value,如下所示。

<DataTemplate x:Key="HeaderTemplate">
<StackPanel>
<TextBlock Text="{Binding Key}"/>
<ListBox ItemsSource="{Binding Value}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding FirstName}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</DataTemplate>

相关内容

  • 没有找到相关文章