2015-02-24 91 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