【问题标题】:DataSource DisplayMember with custom string composed of DataSource properties具有由 DataSource 属性组成的自定义字符串的 DataSource DisplayMember
【发布时间】:2020-06-02 21:30:02
【问题描述】:

是否可以将ListBox绑定到List<A>的DataSource,同时将DisplayMember设置为由A的属性组成的自定义字符串,比如下面的$"{A.b} {A.c}"

var list1 = new List<A>();
// populate list
MyListBox.DisplayMember = $"{A.b} {A.c}"; // not going to work
MyListBox.DataSource = list1;

我知道我可以使用匿名类型,但我希望 ListBox.Items 保持类型 A。我不想执行以下操作,

var list2 = (from a in list1
             select new {A = a, DisplayMember = $"{a.b} {a.c}"}).ToList();
MyListBox.DisplayMember = "DisplayMember";
MyListBox.DataSource = list2;

因为现在MyListBox.Items 是匿名的,无法像var list = MyListBox.Items.OfType&lt;A&gt;() 那样检索A。

那么,有没有办法做到这一点?

【问题讨论】:

    标签: c# anonymous-types objectdatasource


    【解决方案1】:

    我想错了。现在解决了。也许这对某些人来说是显而易见的,但我会为后代发布我的答案。

    在第二个示例中使用匿名类型,只需将 ValueMember 设置为 A

    var list2 = (from a in list1
                 select new {A = a, DisplayMember = $"{a.b} {a.c}"}).ToList();
    MyListBox.DisplayMember = "DisplayMember";
    MyListBox.ValueMember = "A";
    MyListBox.DataSource = list2;
    
    var list3 = MyListBox.Items.OfType<A>().ToList(); // works!
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-11
      • 1970-01-01
      • 2013-05-12
      • 1970-01-01
      • 1970-01-01
      • 2018-10-28
      • 1970-01-01
      • 2010-10-13
      相关资源
      最近更新 更多