VB.NET Forms ListBox不显示DataSource

时间:2015-02-24 13:26:18

标签: vb.net listbox

我试图将我的ListBox链接到ObservableCollection。 这是我的用于定义mods的类:

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

这是实际的Property ModList:

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

我使用以下方式添加项目:

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

每次我想使用AddMod为此Collection添加内容时,它都不会在我的列表框中显示:/我向ListBox添加了一个ModListBindingSource,并将DisplayMember和ValueMember设置为ModName,但它仍然赢得了'工作。我还有一个状态标签,它说,它成功地将mod添加到集合中,但它只是不能在ListBox中显示它们。我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

ObservableCollection并不是您想要的 - 这将允许您的代码通过事件查看对集合的更改。例如,如果有几个演员将项目添加到集合中,并且您想知道这一点。在这种情况下,由于“本地”代码正在添加项目,因此不需要。

还不清楚集合如何作为ListBox映射到DataSource。试试这个:

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

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

现在,当您向BindingList添加内容时,它们将显示在theListBox中。如果项目更改(例如名称),则该更改不会在没有更多工作的情况下显示,但因为这些文件名似乎不太可能。

除非外部类还需要访问集合/ BindingList,否则不需要表单属性;在这种情况下,你可能不需要一个二传手。