簡體   English   中英

綁定列表框到列表<object>在 WinForms 中

[英]Binding Listbox to List<object> in WinForms

將列表框綁定到 Windows 窗體中的對象列表的最簡單方法是什么?

您正在尋找DataSource property

List<SomeType> someList = ...;
myListBox.DataSource = someList;

您還應該將DisplayMember屬性設置為您希望列表框顯示的對象中的屬性名稱。 如果不這樣做,它將調用ToString()

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";  

假設您正在顯示具有“customerName”和“customerId”屬性的客戶對象列表:

listBox.DataSource = customerListObject;
listBox.DataTextField = "customerName";
listBox.DataValueField = "customerId";
listBox.DataBind();

編輯:我知道這在 asp.net 中有效 - 如果你正在做一個 winforms 應用程序,它應該非常相似(我希望......)

當然,這不會為您提供任何真正有意義的東西,除非對象正確覆蓋了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();            

這里有兩條主要路線:

1: listBox1.DataSource = yourList;

對 yourList 和 Rebind 進行任何操作(添加/刪除)。
設置 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM