删除项目时 ListBox List<T> 绑定问题

Posted

技术标签:

【中文标题】删除项目时 ListBox List<T> 绑定问题【英文标题】:ListBox List<T> binding issue when removing item 【发布时间】: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(最后一个) 【参考方案1】:

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

【讨论】:

+1:我在 2008 年 9 月写过关于解决这个确切问题的博客 - 请参阅 nichesoftware.co.nz/blog/200809/databinding-lists【参考方案2】:

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

【讨论】:

以上是关于删除项目时 ListBox List<T> 绑定问题的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中枚举时从 List<T> 中删除项目的智能方法

数据绑定到 List - 查看 ListBox、ComboBox 中数据源的变化

如何为ListBox项提供有意义的名称

绑定到 List<string> 时如何使 ListBox 可编辑?

如果 T 发生变化,则从 List<T> 中删除所有项目

创建以ListBox的项目命名的多个文件夹