【问题标题】:How to bind values from a list of dictionaries to a ListView?如何将字典列表中的值绑定到 ListView?
【发布时间】:2016-06-19 00:11:32
【问题描述】:

我有一个列表。列表中的每个项目都有一个带有 2 个键/值的字典项目。

public List<Dictionary<string, object>> listOfDictionaries;
public Dictionary<string, object> aDict;

public void AddToList()
{
  aDict = new Dictionary<string, object> ();
  aDict[KEY_1] = "Value 1";
  aDict[KEY_2] = "Value 2";
  listOfDictionaries.add(aDict);

  aDict = new Dictionary<string, object> ();
  aDict[KEY_1] = "Value 3";
  aDict[KEY_2] = "Value 4";
  listOfDictionaries.add(aDict);

  MyListView.ItemSource = listOfDictionaries;
}

现在我想将我的字典项绑定到 XAML 中的 ListView。

<ListView Name:"MyListView" />

但是,这样做只会在 MyListView 中显示“Collection”一词。我希望 MyListView 显示我所有字典中的所有值。例如:

First row:
Value 1 + Value 2

Second row:
Value 3 + Value 4

等等。顺便说一句,KEY_1 和 KEY_2 都是常量,它们的值在不同的文件中确定。

我在网上浏览了许多示例,但它们要么看起来太混乱,要么只是绑定到一本字典。任何帮助是极大的赞赏。谢谢!

【问题讨论】:

  • 您可以更轻松地使用类列表

标签: c# xaml listview dictionary data-binding


【解决方案1】:

要使用可以具有动态属性名称的对象,ExpandoObjectdynamic 是要走的路。

List<dynamic> list = new List<dynamic>();

public void AddToList()
{
    dynamic d1 = new ExpandoObject();
    ((IDictionary<string, object>)d1)[KEY_1] = "Value 1";
    ((IDictionary<string, object>)d1)[KEY_2] = "Value 2";
    list.Add(d1);

    dynamic d2 = new ExpandoObject();
    ((IDictionary<string, object>)d2)[KEY_1] = "Value 3";
    ((IDictionary<string, object>)d2)[KEY_2] = "Value 4";
    list.Add(d2);

    MyListView.ItemSource = listOfDictionaries;
}

【讨论】:

  • 嗨,我试过了,它确实有效。但是我似乎无法将 KEY_1 和 KEY_2 设置为其他地方定义的常量。
  • @Moo33 你的意思是类属性名称应该从 KEY_1 更改为该常量的值吗?
  • 是的,没错。一种我可以获得与键名关联的值并且该键名在其他地方是常量的方法。
【解决方案2】:

是的,创建一个名为 item 的类,该类具有属性 valueA 和 value B 以及 valeAplusValueB 这是总和。填充项目列表并使用绑定到 valueAplusValueB 属性的列表视图项目设置 litview 的源

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-12
    • 2012-04-07
    • 1970-01-01
    • 2011-01-23
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多