簡體   English   中英

將自定義對象列表綁定到ComboBox集合

[英]Databinding a List of custom objects to ComboBox collection

我正在一個項目中,該項目通過USB控制多個設備並從Windows攔截WM_DEVICECHANGE事件,以管理當前連接的設備和使用這些設備的插件模塊。 在主窗體上存在一個組合框,該組合框(應)顯示所有可用的設備(自定義對象),並在設備到達或移除時進行動態更新。

現在,我閱讀的所有教程(包括此處的一些教程)都指示我將組合框的DataSource屬性設置為我擁有的對象列表,並將DisplayMember / ValueMember屬性留空以顯示ToString()並返回該對象作為價值。

在某些情況下,我嘗試過(例如在實例化列表后用示例/真實對象填充列表),但組合框卻會填充,但是在刪除或到達組合框時,即使將列表重新分配給組合框的DataSource屬性,組合框中的集合也不會更新在每種設備到達/刪除方法之后。

編輯:哦對了...問題...

如何動態綁定(作為值返回的自定義對象)的集合的數據,以便它可以處理列表內容的突然更改(添加/刪除)?

編輯2:對不起,我沒有更清楚地說明這一點,不知道WPF是如何普及的,但這是一個WinForms項目。

在此先感謝您提供的任何幫助。 :)

即使在每種設備到達/刪除方法之后將列表重新分配給組合框的DataSource屬性也是如此。

重新分配后,您需要再次調用.DataBind()

如果您使用的是.net 3.5或更高版本,則可以使用ObservableCollection來自動更新列表。

我不確定您是使用WinForms還是WPF。 我假設WPF是因為現在沒有人應該從WinForms開始...


您需要將列表更改為ObservableCollection <T>。

WPF綁定模型在很大程度上依賴於精靈和術士的魔術子系統(不是在嘲笑您,我是認真的)。 他們有自己的語言,可以互相通知DataContext和UI之間發生了某些變化。 這些主要是DependencyObject / Dependency屬性,INotifyPropertyChanged和INotifyCollectionChanged以及ObservableCollection <T>。

通過正確使用這些圖騰,ViewModels / Models(粘貼在DataContext中和/或綁定到DataSource的東西)中的更改將反映在UI上。

我不知道那ToString()位。 我總是將DisplayMember設置為要顯示的屬性。 我不在乎ValueMember,因為SelectedItem是我的對象。

如果這是一個WinForms項目,則DataBind不適用。 (USB和其他東西)

向上更新ComboBox中的數據時,我在項目中沒有做任何時髦的事情,我只是再次設置了DataSource。

編輯:您可以嘗試使用BindingList而不是List。 http://msdn.microsoft.com/en-us/library/ms132679.aspx

暫無
暫無

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

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