为嵌套集合中的每个项目创建元素
create element for each item in nested collection
我有一个字典作为电话簿。它使用字母表中的一个字符作为键,并使用 类 的可观察集合作为值。这些 类 包括 FirstName、LastName 等属性...
看起来像这样
Dictionary<char,ObservableCollection<NameClass>> NameDictionary
目标是能够将此字典用作列表框的项源,并将键插入列表框,然后是该特定键的可观察集合中的每个 NameClass.FirstName。
这是我目前拥有的精简版 DataTemplate
<DataTemplate x:Key="HeaderTemplate" >
<TextBlock Text="{Binding Key}"/>
<TextBlock Text="{Binding Value}"/>
</DataTemplate>
这是使用 DataTemplate 和 NameDictionary 作为源的列表框。
<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 插入到列表框中,但我希望它将所有项目插入到 ObservableCollection 中,而不是集合本身。
对于一个视觉示例,我想制作看起来像这样的东西
Char
NameClass.FirstName
NameClass.FirstName
NameClass.FirstName
Char
NameClass.FirstName
NameClass.FirstName
NameClass.FirstName
但是现在插入的是这个
Char
ObservableCollection
Char
ObservableCollection
Char
ObservableCollection
我更愿意为此使用 xaml,而不是代码隐藏。我认为这并不太难,如果有任何帮助,我将不胜感激。
您的“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>
我有一个字典作为电话簿。它使用字母表中的一个字符作为键,并使用 类 的可观察集合作为值。这些 类 包括 FirstName、LastName 等属性...
看起来像这样
Dictionary<char,ObservableCollection<NameClass>> NameDictionary
目标是能够将此字典用作列表框的项源,并将键插入列表框,然后是该特定键的可观察集合中的每个 NameClass.FirstName。
这是我目前拥有的精简版 DataTemplate
<DataTemplate x:Key="HeaderTemplate" >
<TextBlock Text="{Binding Key}"/>
<TextBlock Text="{Binding Value}"/>
</DataTemplate>
这是使用 DataTemplate 和 NameDictionary 作为源的列表框。
<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 插入到列表框中,但我希望它将所有项目插入到 ObservableCollection 中,而不是集合本身。
对于一个视觉示例,我想制作看起来像这样的东西
Char
NameClass.FirstName
NameClass.FirstName
NameClass.FirstName
Char
NameClass.FirstName
NameClass.FirstName
NameClass.FirstName
但是现在插入的是这个
Char
ObservableCollection
Char
ObservableCollection
Char
ObservableCollection
我更愿意为此使用 xaml,而不是代码隐藏。我认为这并不太难,如果有任何帮助,我将不胜感激。
您的“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>