【发布时间】:2011-02-10 03:07:30
【问题描述】:
将列表框绑定到 Windows 窗体中的对象列表的最简单方法是什么?
【问题讨论】:
-
你的平台是什么?银光? WPF?窗体? ASP.NET?答案有点取决于这些知识。
将列表框绑定到 Windows 窗体中的对象列表的最简单方法是什么?
【问题讨论】:
您正在寻找DataSource property:
List<SomeType> someList = ...;
myListBox.DataSource = someList;
您还应该将DisplayMember 属性设置为您希望列表框显示的对象中的属性名称。如果你不这样做,它会调用ToString()。
【讨论】:
someList.Remove((SomeType)myListBox.SelectedValue);(在 WinForms 中)
BindingList<T>。
将System.Windows.Forms.Listbox 控件绑定到对象列表(此处为动态类型)
List<dynamic> dynList = new List<dynamic>() {
new {Id = 1, Name = "Elevator", Company="Vertical Pop" },
new {Id = 2, Name = "Stairs", Company="Fitness" }
};
listBox.DataSource = dynList;
listBox.DisplayMember = "Name";
listBox.ValueMember = "Id";
【讨论】:
Company 成员?
假设您正在显示具有“customerName”和“customerId”属性的客户对象列表:
listBox.DataSource = customerListObject;
listBox.DataTextField = "customerName";
listBox.DataValueField = "customerId";
listBox.DataBind();
编辑:我知道这在 asp.net 中有效——如果你正在做一个 winforms 应用程序,它应该非常相似(我希望......)
【讨论】:
DataBind() 方法不存在,我猜?
当然,除非对象已正确覆盖 ToString()(或者您没有真正使用通用对象列表并且可以绑定到特定字段),否则这不会为您提供任何真正有意义的东西:
List<object> objList = new List<object>();
// Fill the list
someListBox.DataSource = objList;
【讨论】:
ListBox1.DataSource = CreateDataSource();
ListBox1.DataTextField = "FieldProperty";
ListBox1.DataValueField = "ValueProperty";
详细示例请参考this文章。
【讨论】:
我没有在这里看到它,所以我发布它,因为对我来说是 winforms 中的最佳方式:
List<object> objList = new List<object>();
listBox.DataSource = objList ;
listBox.Refresh();
listBox.Update();
【讨论】:
这里有两条主要路线:
1:listBox1.DataSource = yourList;
对 yourList 进行任何操作(添加/删除)并重新绑定。
设置 DisplayMember 和 ValueMember 来控制显示的内容。
2:listBox1.Items.AddRange(yourList.ToArray());
(或者使用for循环来做Items.Add(...))
您可以通过重载列表对象的 ToString() 或实现 listBox1.Format 事件来控制 Display。
【讨论】:
对于 UWP 应用:
XAML
<ListBox x:Name="List" DisplayMemberPath="Source" ItemsSource="{x:Bind Results}"/>
C#
public ObservableCollection<Type> Results
【讨论】: