2016-06-30 10 views
0

リストをデータソースとして持つリストボックスがあります。私が望むのは、リストにアイテムを追加したり削除したりすると、リストボックス自体が更新されるということです。ソース(リスト)が変更されたときにリストボックスを自動的に更新する方法

今、私はそれを行うことができますが、本当に醜い方法です。

例えば:私は何をやっていることは、私はリストを変更するすべての場所でデータソースを削除し、追加で

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 

これは動作しますが、再度、データソースを確認するためにリストボックスを伝えるのいずれかの方法がありますそれをリセットすることなく?

編集:私はフィルタリングする方法

てtextBoxテキストでイベントを変更:

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

使用をプレーンなリストの代わりに 'BindingList'や' ObservableCollection'を使います。両方の方法の違いはよく説明されている[ここ](http://stackoverflow.com/a/4284805/2882256)。 –

答えて

1

あなたがバインドする必要がある "(ForDiasの)するBindingList" を

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

それは完璧に働いた。今私はそれをフィルタにするためにstrugling。 'where'は私にIEnumerableを返し、私は新しいバインディングリストに変換できます。 ListBoxをバインドすることができます。毎回新しいバインディングリストを作成せずにこれを行う方法はありますか? – Aimnox

+0

@Aimnoxフィルターのコードを貼り付けてください。 –

+0

@AlexB。フィルタを追加しました – Aimnox

関連する問題