2016-06-30 11 views
0

So habe ich ein Listenfeld mit einer Liste als Datenquelle. Ich möchte, dass wenn ich Elemente aus der Liste hinzufüge und entferne, das Listenfeld sich selbst aktualisiert.Wie man ein Listenfeld automatisch aktualisiert, wenn die Quelle (Liste) geändert wird

Im Moment kann ich es aber in einer wirklich hässlichen Art und Weise tun. Was ich tue, ist zu entfernen und die Datenquelle in allen Orten hinzufügen, die ich die Liste ändern:

Zum Beispiel:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    formaciones.Add(New ForDias(Formacion, NumericUpDown1.Value)) 
    ListBox2.DataSource = Nothing 
    ListBox2.DataSource = formaciones 
End Sub 

Dies funktioniert, aber ist es eine Möglichkeit, die Listbox zu sagen, wieder die Datenquelle zu überprüfen ohne es zurückzusetzen?

Edit: Wie ich filtern:

Auf der textBox Text geändert Veranstaltung:

Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged 
    ListBox2.DataSource = New BindingList(Of Object)((formaciones.Where(Function(i As ForDias) i.Formacion.ToString().Contains(TextBox1.Text))).ToList()) 
End Sub 
+1

Verwenden eine 'BindingList' oder' ObservableCollection' anstelle einer einfachen Liste. Die Unterschiede beider Methoden sind [hier] (http://stackoverflow.com/a/4284805/2882256) gut erklärt. –

Antwort

1

Sie müssen binden "Binding (von ForDias)"

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
Dim formaciones As New System.ComponentModel.BindingList(Of ForDias) 
formaciones.Add(New ForDias(Formacion, NumericUpDown1.Value)) 
ListBox2.DataSource = Nothing 
ListBox2.DataSource = formaciones 
End Sub 
+0

Es hat perfekt funktioniert, ty. Jetzt müssen wir es filtern. Das 'where' gibt mir ein IEnumerable zurück, das ich in eine neue Bindungsliste umwandeln kann. Ich kann dann die ListBox an sie binden. Gibt es eine Möglichkeit, dies zu tun, ohne jedes Mal eine neue Bindungsliste zu erstellen? – Aimnox

+0

@Aimnox können Sie bitte den Code Ihres Filters einfügen? –

+0

@AlexB. Der Filter wurde hinzugefügt – Aimnox