我试图将我的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中显示它们。我错过了什么吗?
答案 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
,否则不需要表单属性;在这种情况下,你可能不需要一个二传手。