2015-02-24 94 views
1

我想鏈接我的列表框到ObservableCollection。 這是我定義的mods類:VB.NET窗體列表框不顯示數據源

Public Class TroveMod 
    Private m_FileName As String 
    Private m_Enabled As Boolean 
    Public Property FileName() As String 
     Get 
      Return m_FileName 
     End Get 
     Set(value As String) 
      m_FileName = value 
     End Set 
    End Property 

    Public Property Enabled() As Boolean 
     Get 
      Return m_Enabled 
     End Get 
     Set(value As Boolean) 
      m_Enabled = value 
     End Set 
    End Property 

    Public ReadOnly Property ModName() 
     Get 
      Return Path.GetFileNameWithoutExtension(FileName) 
     End Get 
    End Property 
End Class 

這是實際的物業ModList:

Private Sub AddMod(file__1 As String, enabled As Boolean) 
    If File.Exists(file__1) Then 
     ModList.Add(New TroveMod() With { _ 
      .FileName = file__1, _ 
      .Enabled = enabled _ 
     }) 
    End If 
End Sub 

每次我想添加一些這樣的:

Public Property ModList() As ObservableCollection(Of TroveMod) 
    Get 
     Return m_ModList 
    End Get 
    Set(value As ObservableCollection(Of TroveMod)) 
     m_ModList = value 
    End Set 
End Property 

我使用添加項目使用AddMod的集合,它不會在我的列表框中顯示:/我添加了一個ModListBindingSource到列表框,並將DisplayMember和ValueMember設置爲ModName,但它仍然不會RK。我也有一個狀態標籤,它說,它成功地將mod添加到集合中,但它不會在ListBox中顯示它們。我錯過了什麼?

+1

只要它看起來不錯 - 代碼將集合綁定到ListBox的位置在哪裏?另外,ModList屬性位於哪個類上?我不確定你真的想要/需要一個二傳手。 – Plutonix 2015-02-24 13:33:33

+0

ModList屬性位於Form類中,我做了partitial.and實際上沒有綁定的代碼。我只是在設計器中設置DataSource,並認爲這將工作...我仍然需要一個綁定? – 2015-02-24 13:41:38

回答

0

ObservableCollection不是你想要的 - 這將允許你的代碼通過事件看到對集合的改變。例如,如果有幾個演員將項目添加到收藏中,並且您想知道這一點。在這種情況下,由於'本地'代碼添加項目,因此不需要。

集合如何映射到ListBoxDataSource也不清楚。試試這個:

Public Class Form... 
    Private myList As New BindingList(Of TroveMod) 

    Sub Form_Load(.... 
     theListBox.DataSource = myList 
     theListBox.DisplayMember = "ModName" 

現在,當你添加的東西到BindingList它們將出現在theListBox。如果一個項目通過更改(例如名稱),那麼沒有更多工作就不會顯示該更改,但這些文件名似乎不太可能。

除非外部類還需要訪問集合/ BindingList,否則不需要表單屬性;在這種情況下,你可能不需要一個setter。

+0

謝謝!有效 :) – 2015-02-24 14:24:14