如何在Windows Forms中将一个ListBox绑定到一个对象列表的最简单方法是什么?
您正在寻找DataSource 属性
:
List<SomeType> someList = ...;
myListBox.DataSource = someList;
你还应该设置DisplayMember
属性,将其设置为对象中要在列表框中显示的属性名称。如果不这样做,它会调用ToString()
。
BindingList<T>
。 - SLaksDataSource
... 如果你使用 System.Windows.Controls.ListBox,相当于它的是 ItemSource
。 - Berger假设您正在显示一个客户对象列表,其中包含"customerName"和"customerId"属性:
listBox.DataSource = customerListObject;
listBox.DataTextField = "customerName";
listBox.DataValueField = "customerId";
listBox.DataBind();
编辑:我知道在asp.net中可以这样做 - 如果你在做winforms应用程序,应该会非常相似(希望如此...)
DataBind()
方法不存在,我猜是这样吧? - Wolf将System.Windows.Forms.Listbox控件绑定到一个对象列表(这里的类型为dynamic)
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";
当然,这并不能提供任何有意义的东西,除非对象已经正确地覆盖了ToString()
方法(或者你并不真正使用一个通用对象列表,而是可以绑定到特定字段):
List<object> objList = new List<object>();
// Fill the list
someListBox.DataSource = objList;
ListBox1.DataSource = CreateDataSource();
ListBox1.DataTextField = "FieldProperty";
ListBox1.DataValueField = "ValueProperty";
请参考此文了解详细示例。
我在这里没有看到过它,所以我发布它,因为对我来说这是WinForms中最好的方法:
List<object> objList = new List<object>();
listBox.DataSource = objList ;
listBox.Refresh();
listBox.Update();
listBox1.DataSource = yourList;
对 yourList 进行任何操作(添加/删除),然后重新绑定。listBox1.Items.AddRange(yourList.ToArray());
(或使用 for 循环执行 Items.Add(...)
)针对UWP应用程序:
XAML
<ListBox x:Name="List" DisplayMemberPath="Source" ItemsSource="{x:Bind Results}"/>
C#
public ObservableCollection<Type> Results