Hallo,
wie ist es möglich einen gemeinsamen Datenstamm unabhängig an zwei (oder mehrere) Steuerelemente zu binden?
Folgende Situation: Ich habe eine Liste von Objekten, die eine ID und eine Farbe haben. Diese Liste gibt es nur einmal (Shared) und enthält alle verfügbaren Farben. Jetzt soll es so sein, dass ein anderes Objekt 2 Flächen hat, für die jeweils eine solche Farbe ausgewählt werden kann. Binde ich diese Liste aber an die ComboBox-Elemente (die stehen für die Auswahl der Farbe der Fläche), dann sind beide gleich, weil es sich um die gleichen Objekte handelt. Der vereinfachte Beispielcode dafür steht unten.
Muss man denn für einen solchen Fall den Datenstamm kopieren, also in diesem Fall zwei - von den Werten her identische - Listen im Speicher halten? Das erscheint mir ineffizient, vorallem bei vielen Daten. Wie löst man ein solches Problem?
Public Class Form1
Dim x As MyCollection
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) _
Handles MyBase.Load
x = New MyCollection
ComboBox1.DataSource = x.Colors
ComboBox2.DataSource = x.Colors
End Sub
Private Sub ComboBox1_SelectedIndexChanged(sender As System.Object, e As _
System.EventArgs) Handles ComboBox1.SelectedIndexChanged
PictureBox1.BackColor = CType(ComboBox1.SelectedItem, MyColor).Color
End Sub
Private Sub ComboBox2_SelectedIndexChanged(sender As System.Object, e As _
System.EventArgs) Handles ComboBox2.SelectedIndexChanged
PictureBox2.BackColor = CType(ComboBox2.SelectedItem, MyColor).Color
End Sub
End Class
Public Class MyCollection
Shared Sub New()
_Colors = New List(Of MyColor)
Call InitializeColors()
End Sub
Private Shared Sub InitializeColors()
_Colors.Add(New MyColor(0, Color.Black))
_Colors.Add(New MyColor(1, Color.White))
_Colors.Add(New MyColor(2, Color.Red))
_Colors.Add(New MyColor(3, Color.Green))
_Colors.Add(New MyColor(4, Color.Orange))
_Colors.Add(New MyColor(5, Color.Blue))
End Sub
Shared Property Colors As List(Of MyColor)
End Class
Public Class MyColor
Public Sub New(id As Integer, color As Color)
_ID = id
_Color = color
End Sub
Property ID As Integer
Property Color As Color
Public Overrides Function ToString() As String
Return Me.Color.ToString
End Function
End Class |