VB.NET Forms ListBox 不显示数据源
VB.NET Forms ListBox doesn't display DataSource
我正在尝试 link 我的 ListBox 到 ObservableCollection。
这是我定义模组的class:
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:
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 向此集合添加一些内容时,它都不会在我的列表框中显示:/我向列表框添加了一个 ModListBindingSource 并将 DisplayMember 和 ValueMember 设置为 ModName 但它仍然不起作用.我还有一个状态标签,上面写着,它成功地将模组添加到集合中,但它只是不会在列表框中显示它们。我错过了什么吗?
ObservableCollection
并不是您想要的 - 这将允许您的代码通过事件查看集合的更改。例如,如果有多个演员向集合中添加项目并且您想知道这一点。在这种情况下,由于 'local' 代码正在添加项目,因此不需要。
也不清楚集合如何映射到 ListBox
作为 DataSource
。试试这个:
Public Class Form...
Private myList As New BindingList(Of TroveMod)
Sub Form_Load(....
theListBox.DataSource = myList
theListBox.DisplayMember = "ModName"
现在,当您向 BindingList
添加内容时,它们将出现在 theListBox
中。如果某个项目 发生了变化 (例如名称),那么如果不做更多的工作,该变化将不会显示出来,但由于这些文件名似乎不太可能。
除非外部 class 也需要访问集合/BindingList
,否则不需要表单 属性;在那种情况下,您可能不需要 setter.
我正在尝试 link 我的 ListBox 到 ObservableCollection。 这是我定义模组的class:
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:
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 向此集合添加一些内容时,它都不会在我的列表框中显示:/我向列表框添加了一个 ModListBindingSource 并将 DisplayMember 和 ValueMember 设置为 ModName 但它仍然不起作用.我还有一个状态标签,上面写着,它成功地将模组添加到集合中,但它只是不会在列表框中显示它们。我错过了什么吗?
ObservableCollection
并不是您想要的 - 这将允许您的代码通过事件查看集合的更改。例如,如果有多个演员向集合中添加项目并且您想知道这一点。在这种情况下,由于 'local' 代码正在添加项目,因此不需要。
也不清楚集合如何映射到 ListBox
作为 DataSource
。试试这个:
Public Class Form...
Private myList As New BindingList(Of TroveMod)
Sub Form_Load(....
theListBox.DataSource = myList
theListBox.DisplayMember = "ModName"
现在,当您向 BindingList
添加内容时,它们将出现在 theListBox
中。如果某个项目 发生了变化 (例如名称),那么如果不做更多的工作,该变化将不会显示出来,但由于这些文件名似乎不太可能。
除非外部 class 也需要访问集合/BindingList
,否则不需要表单 属性;在那种情况下,您可能不需要 setter.