【问题标题】:How to bind a dictionary as a datasource to a ListBox and override the default ToString() of displayMember to display items?如何将字典作为数据源绑定到 ListBox 并覆盖 displayMember 的默认 ToString() 以显示项目?
【发布时间】:2020-02-04 12:23:08
【问题描述】:

我有 Dictionary marketDictionary = new Dictionary();是 MarketDetail 包含 4 个值/对象。我正在尝试使用 listbox.datasource 为每个键显示 MarketDetail 中的一项。

我可以做到这一点,但我想在listbox 中显示该项目。它显示的是值 MarketDetail 的键和名称。我了解这些是我在选择listbox item 时需要的密钥对。

我正在使用:

        listBox1.SelectionMode = SelectionMode.None;
        listBox1.DisplayMember = "key";
        listBox1.ValueMember = "value";
        listBox1.DataSource = new BindingSource(marketDictionary, null);
        listBox1.SelectionMode = SelectionMode.One;

从选择列表中的项目、获取密钥对并执行我需要的操作的角度来看,这非常有效。但是有没有一种方法可以为添加到listbox 的每个项目或字典中的 value.item 显示我自己的文本。我希望这是有道理的。尊重罗伯特

【问题讨论】:

标签: c# user-interface data-binding listbox


【解决方案1】:

经过大量阅读和测试,我找到了适合我的解决方案。我没有意识到,当我在 marketDictionary 中为我的对象构建类时,我应该使用 get/set。 所以我现在将数据源链接到 marketDictionary.Values 并且我可以引用显示成员中的项目。所以现在我可以在我的对象类中添加一个新项目以用于我的显示成员。完美的。我学到的另一件事是最后使用数据源行,这停止了 selectchange 触发。
所以现在我得到了:

public class MarketDetail
{
    public string marketId { get; set; }
    public string course { get; set; }
}
      public void myRaceList()
      {
        listBox1.DisplayMember = "course";
        listBox1.ValueMember = "marketId";
        listBox1.DataSource = new BindingSource(marketDictionary.Values, null);
      }

【讨论】:

  • 对不起,我不确定我是否正确地发布了这个。感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-02
  • 2019-11-24
  • 1970-01-01
  • 1970-01-01
  • 2011-08-22
相关资源
最近更新 更多