我有一本字典作为电话簿。它使用字母表中的一个字符作为键,并使用一个可观察的类集合作为值。这些类包括像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>