This is a distilling of my actual case scenario which involves LiteDB. It simplifies the problem to a broader .net question.
Let's say I have 3 classes:
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
I map Controller and Console to two separate BindingSources via the Data Source designer.
I have a Custom Control which contains a ComboBox. Instances of this are bound to either a List(Of Control) or List(Of Controller) for pages editing both Controller and Console lists.
Now, I want the custom control to update the relevant property in both Controller and Console, with my passing it the property whoes ID feild I wish updating with the SelectedValue of the combobox. Hopefull, the pseudo code below illustrates this:
'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
And I would set up the Custom comboxes thus:
Dim cbControls As New UserControl With {.bs = ConrollerBS, .CollectionName = "Controls"}
Dim cbControllers As New UserControl With {.bs = ConsoleBS, .CollectionName = "Controllers"}
I think this may involve Reflection? I tried to read up on that, but it made the top of my head blow off.
How can I achieve the above?
Aucun commentaire:
Enregistrer un commentaire