Это пример моего реального сценария, в котором используется LiteDB.Это упрощает проблему для более широкого вопроса .net.
Допустим, у меня есть 3 класса:
Public Class Control
Public Property ID As Integer
Public Property ControlName As String
End Class
Public Class Controller
Public Property ID As Integer
Public Property ControllerName As String
Public Controls As List(Of Control)
End Class
Public Class Console
Public Property ID As Integer
Public Property ConsoleName As String
Public Controllers As List(Of Controller)
End Class
Я сопоставляю Controller
и Console
с двумя отдельными BindingSources
через конструктор Data Source
.
У меня есть Custom Control
, который содержит ComboBox
.Экземпляры этого связаны либо с List(Of Control)
, либо с List(Of Controller)
для страниц, редактирующих списки контроллеров и консолей.
Теперь я хочу, чтобы пользовательский элемент управления обновил соответствующее свойство как в Controller, так и в консоли, передав ему свойство whoes ID
feild, которое я хочу обновить с помощью SelectedValue
в выпадающем списке.Надеюсь, что приведенный ниже псевдокод иллюстрирует это:
'Custom Control with ComboBox:
Public Class UserControl
Public bs As BindingSource ' Can contain rows of Controller or Console
Public CollectionName As String
Dim WithEvents KComboBox As ComboBox
Private Sub ComboChanged() Handles KComboBox.SelectionChangeCommitted
' [PseudoCode]
DirectCast(bs.Current, Controller).[CollectionName].ID = KComboBox.SelectedValue
' Resolves to:
DirectCast(bs.Current, Controller).[Controls.ID] = KComboBox.SelectedValue
' or:
DirectCast(bs.Current, Console).[Controllers.ID] = KComboBox.SelectedValue
End Sub
End Class
И я бы настроил пользовательские поля таким образом:
Dim cbControls As New UserControl With {.bs = ConrollerBS, .CollectionName = "Controls"}
Dim cbControllers As New UserControl With {.bs = ConsoleBS, .CollectionName = "Controllers"}
Я думаю, что это может включать Reflection
?Я попытался прочитать об этом, но это заставило мою голову сорваться.
Как мне достичь вышеуказанного?