我有一个这样的列表
团体 | ID | 等 | 姓名 |
---|---|---|---|
美国 | 1 | 纽约 | 纽约 |
美国 | 2 | 新泽西州 | 新泽西州 |
英国 | 3 | 罗 | 伦敦 |
英国 | 4 | 马 | 曼彻斯特 |
我需要在另一个菜单中制作一个菜单
外面的菜单应该有两个选项:
USA & UK
子菜单应显示城市名称
所以首先我将列表分组如下:
Dim KVPlst As New List(Of KeyValuePair(Of String, List(Of KeyValuePair(Of Integer, String))))
'Making a grouped list from the whole list
Dim groupedList = lst.GroupByDynamic({pl.GroupField}.ToList).ToList
For Each grp In groupedList
Dim key = GetObjProperty(grp, "Key")
Dim keyName = DirectCast(key, ValueTuple(Of String)).Item1
Dim grplist = grp.Cast(Of Object).ToList.Select(Function(x) KVP(CInt(GetObjProperty(x, "ID")), GetObjProperty(x, "CityName").ToString)).ToList
KVPlst.Add(KVP(keyName, grplist))
Next
ItemsControl.ItemsSource = KVPlst
ItemsControl.DisplayMemberPath = "Key"
Dim stl = New Style
stl.Setters.Add(New Setter With {.[Property] = MenuItem.ItemsSourceProperty, .Value = New Binding("Value")})
stl.Setters.Add(New Setter With {.[Property] = MenuItem.DisplayMemberPathProperty, .Value = "Value"})
stl.Setters.Add(New Setter With {.[Property] = MenuItem.ItemContainerStyleProperty, .Value = clickEvent})
ItemsControl.ItemContainerStyle = stl
List(Of KeyValuePair(Of String, List(Of KeyValuePair(Of Integer, String))))
将组列表显示为 Key = Group name
和 Value = a list of cities with their ID
然后设置
ItemsControl.ItemsSource = list
& ItemsControl.DisplayMemberPath = "Key"
,
在
ItemsControl.ItemContainerStyle
里面我添加了一个新的Style
:“一个Setter
代表ItemsSourceProperty
绑定到列表的"Value"
,一个Setter
代表DisplayMemberPathProperty
和"Value"
(应该显示City Name
)“
我想显示第一(外)列表的
Key
和第二(内)列表的Value
,
所以我设置
ItemsControl.DisplayMemberPath = "Key"
和DisplayMemberPathProperty = "Value"
如上。
但是设置好后
ItemsControl.DisplayMemberPath = "Key"
,
带有
Setter
的DisplayMemberPathProperty = "Value"
没有效果,它显示Key
.
谢谢。