WPF:绑定字典<string,list <dataclass =“”>&gt;嵌套控件</string,>

时间:2014-05-15 17:00:20

标签: wpf list dictionary expander

我知道之前曾经问过类似的问题,但我真的很难让这个问题发挥作用。我有一个字典定义为:

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正确地执行此操作,但我可能会在代码隐藏中编写动态加载控件。我想在走这条路之前我会问。

谢谢!

1 个答案:

答案 0 :(得分:3)

您可以使用ItemsControlmsdn)并指定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>