WPF ComboBox如何设置DisplayMemberPath显示内层字典Value值
ComboBox绑定嵌套字典时显示内层Value的解决方法
问题场景
以下代码将嵌套字典设置为ComboBox的ItemsSource后,下拉框显示内容为(collection),需要改为显示内层字典的Value(即ABC、DEF、GHI):
Dictionary<string, Dictionary<string, string>> dic = new Dictionary<string, Dictionary<string, string>>(); Dictionary<string, string> temp = new Dictionary<string, string>(); temp.Add("AAA", "ABC"); dic.Add("1", temp); temp = new Dictionary<string, string>(); temp.Add("BBB", "DEF"); dic.Add("2", temp); temp = new Dictionary<string, string>(); temp.Add("CCC", "GHI"); dic.Add("3", temp); comboBox.ItemsSource = dic; comboBox.SelectedValuePath = "Key"; comboBox.DisplayMemberPath = "???";
原因分析
外层字典的每个元素是KeyValuePair<string, Dictionary<string, string>>,直接绑定内层字典(即Value属性)时,WPF会将Dictionary视为集合类型,因此显示(collection)而非具体的Value值。
解决方案
由于每个内层字典仅包含一个键值对,我们可以先将嵌套字典转换为扁平结构,提取出需要显示的内层Value,再绑定到ComboBox:
// 将嵌套字典转换为包含外层Key和内层Value的扁平集合 var displayItems = dic.Select(kv => new { Key = kv.Key, DisplayValue = kv.Value.Values.First() }).ToList(); comboBox.ItemsSource = displayItems; comboBox.SelectedValuePath = "Key"; comboBox.DisplayMemberPath = "DisplayValue";
如果内层字典可能包含多个元素,可以根据业务需求调整kv.Value.Values.First()的逻辑(比如取特定Key对应的Value)。
内容的提问来源于stack exchange,提问作者jungyeontak
相关产品推荐
相关产品推荐

