我有一个班级
class Person
{
public string Name..get...
public string Age...get...
}
这存储在Dictionary<string, List<Person>> m_PersionDict;
我想按列表在列表视图中显示这个字典...组名是字典的关键..
类似的东西:
这里男性和女性是字典中的不同键。
...谢谢
答案 0 :(得分:3)
没有简单的方法可以做到这一点,即直接绑定到Dictionary<string, List<Person>>
并将PropertyGroupDescripton
应用于ICollectionView
,但您可以轻松地将字典转换为匿名列表对象然后像往常一样按Key属性分组:
public MainWindow()
{
InitializeComponent();
//the dictionary
Dictionary<string, List<Person>> m_PersionDict = new Dictionary<string, List<Person>>();
m_PersionDict.Add("Male", new List<Person>()
{
new Person() { Name = "John Doe", Age = 42 },
new Person() { Name = "Sammy Doe", Age = 13 }
});
m_PersionDict.Add("Female", new List<Person>()
{
new Person() { Name = "Jane Doe", Age = 39 }
});
var flattened = m_PersionDict.SelectMany(x => x.Value.Select(y => new { Key = x.Key, Name = y.Name, Age = y.Age })).ToList();
lv.ItemsSource = flattened;
CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(lv.ItemsSource);
PropertyGroupDescription groupDescription = new PropertyGroupDescription("Key");
view.GroupDescriptions.Add(groupDescription);
}
这不应该产生任何实际后果,而且支付的代价很小。
<ListView Name="lv">
<ListView.View>
<GridView>
<GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding Name}" />
<GridViewColumn Header="Age" Width="50" DisplayMemberBinding="{Binding Age}" />
</GridView>
</ListView.View>
<ListView.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<TextBlock FontWeight="Bold" FontSize="14" Text="{Binding Name}"/>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ListView.GroupStyle>
</ListView>