【问题标题】:ListBox shows (Collection) instead of object's ToString() when List of Collections is bound绑定集合列表时,ListBox 显示 (Collection) 而不是对象的 ToString()
【发布时间】:2011-05-10 21:34:25
【问题描述】:

我有一个 ListBox,它绑定到 A 类元素列表的一个实例,它是一个集合。

class A : List<B> 
{ 
  public override ToString()
  {
    return "A";
  }
}

class C
{
  List<A> list;
}

列表框:

<ListBox ItemsSource="{Binding list}"></ListBox>

应用程序运行时,每一项都显示“(Collection)”

如何使每个项目显示“A”而不是“Collection”?

【问题讨论】:

    标签: c# .net wpf data-binding binding


    【解决方案1】:

    ItemsSource 期望该属性为 IEnumerable,因此它直接绑定到集合的内容而不是 List 对象。

    【讨论】:

      【解决方案2】:

      我该怎么做才能让每个项目都显示出来 “A”而不是“集合”?

      您需要覆盖列表项 (B) 而不是列表本身 (A) 上的 ToString 方法。

      public class B 
      {
         public override ToString()
         {
            return "A";
         }
      }
      

      【讨论】:

      • ListBox 中的每一项都绑定到 A 类的一个实例。 A 是 B 对象的集合。我的目标是将 A 对象列表绑定到 ListBox,以便每个项目显示例如:“项目包含 30 个 B 对象”“项目包含 14 个 B 对象”而不是每个项目显示“(集合)”
      【解决方案3】:

      为了解决这个问题,我做了以下操作:

      class A : IEnumerable
      {
        private List<B> _bList = new List<B>();
      
        public override ToString()
        {
          return "A";
        }
      
        IEnumerator GetEnumerator()
        {
          return _bList.GetEnumerator();
        }
      
        public void Add(B element){
        {
          _bList.Add(element);
        }
      }
      
      class C
      {
        List<A> list;
      }
      

      【讨论】:

        猜你喜欢
        • 2011-08-22
        • 1970-01-01
        • 1970-01-01
        • 2011-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-10
        • 1970-01-01
        相关资源
        最近更新 更多