【问题标题】:ListBox List<T> binding issue when removing item删除项目时 ListBox List<T> 绑定问题
【发布时间】:2011-07-05 21:41:37
【问题描述】:

我在使用绑定了对象列表的ListBox 控件时遇到问题。

每次在列表中添加或删除对象时,我都会调用此函数:

private void RefreshBarList()
{
   lstBar.DataSource = null;
   lstBar.Items.Clear();
   lstBar.DisplayMember = "BarDescription";
   lstBar.DataSource = BarCollection.BarList;
   lstBar.Refresh();
}

在将项目添加到列表或删除列表中最后一项以外的任何内容时效果很好。如果我删除列表中的最后一个对象,它将在列表框中显示对象类型而不是 BarDescription

BarCollection 是另一个包含带有 Bar 对象的 List 的类,并且 BarCollection.BarList 完全返回该列表。

Bar 类非常简单:

public class Bar
{
   private string _barDescription;

   public string BarDescription
   {
      get
      {
         return _barDescription;
      }
   }

   public Bar(string barDescription)
   {
      _barDescription = barDescription;
   }
}

我不知道为什么会发生这种情况,有人有什么建议吗?任何帮助将不胜感激。

【问题讨论】:

  • 你指的是哪个 Compact 框架?
  • 你确定你没有在其他地方绑定它吗?
  • 如果您删除列表中的最后一项,您希望显示什么?列表中没有任何内容,没有可用属性 BarDescription 的对象。这听起来像是绑定空对象的默认行为,因为只有签名(但没有数据)可用。
  • 我没有在其他任何地方绑定它。当我添加或从列表中删除项目时,都会调用 RefreshBarList 方法。唯一一次出价搞砸是当您删除列表中的最后一个对象时。
  • @jamietre:列表中可能有 6 项:-如果您删除第 4 项,则效果很好-如果您删除了剩余 5 项,它将在列表中显示对象类型而不是属性 BarDescription 6th(最后一个)

标签: c# .net-3.5 compact-framework listbox


【解决方案1】:

尝试使用BindingList&lt;T&gt; 而不是List&lt;T&gt;

【讨论】:

【解决方案2】:

我也遇到了同样的问题,只是把ToArray()放到mylist中就解决了。

【讨论】:

    猜你喜欢
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多