我知道之前曾经问过类似的问题,但我真的很难让这个问题发挥作用。我有一个字典定义为:
Dictionary<string, List<DataClass>> MyDict = new Dictionary<string, List<DataClass>>();
//Add some code to populate the dictionary here...
public class DataClass
{
public string Name {get; set;}
public int Age {get; set;}
public int ID {get; set;}
}
我的XAML基本上是:
<StackPanel...>
<Expander...>
<ListBox.../>
</Expander>
<Expander...>
<ListBox.../>
</Expander>
...
</StackPanel>
我的问题是:1)如何使Expander / ListBox的数量看起来与MyDict中的字符串值匹配。意思是,我希望MyDict中的每个Key都有一个Expander / ListBox对,其中Expader of Expander等于Key。 2)如何获取MyDict的值来填充ListBox?我已经为列表框编写了代码,它适用于List,但我不知道如何将其从Dictionary中删除。
我尝试使用WPF正确地执行此操作,但我可能会在代码隐藏中编写动态加载控件。我想在走这条路之前我会问。
谢谢!
答案 0 :(得分:3)
您可以使用ItemsControl
(msdn)并指定ItemTemplate
:
<ItemsControl ItemsSource="{Binding}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Expander Header="{Binding Key}">
<ListBox ItemsSource="{Binding Value}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding ID}" />
<TextBlock Text="{Binding Name}" />
<TextBlock Text="{Binding Age}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Expander>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>