私はVB.NETで作業しています
クラス Invoice のオブジェクトが入力された Invoices という名前の ArrayList があります。
これを ListBox にデータ バインドして、ArrayList の内容が更新され、ListBox の更新が変更されるようにしたいと思います。Invoice クラスに .ToString 関数を実装しましたが、ArrayList を ListBox にバインドする方法がわかりません。
助言がありますか?
私はVB.NETで作業しています
クラス Invoice のオブジェクトが入力された Invoices という名前の ArrayList があります。
これを ListBox にデータ バインドして、ArrayList の内容が更新され、ListBox の更新が変更されるようにしたいと思います。Invoice クラスに .ToString 関数を実装しましたが、ArrayList を ListBox にバインドする方法がわかりません。
助言がありますか?
これはwinformsであると仮定します。
双方向のデータ バインディングが必要な場合は、次のものが必要です。
IBindingList
です; クラスの場合BindingList<T>
、当然の選択です(ArrayList
単にそうしません...)INotifyPropertyChanged
(通常は「*Changed」パターンを使用できますが、これは によって尊重されませんBindingList<T>
) 。幸いなことに、ListBox
これらの両方を処理します。完全な例は次のとおりです。私はC#を使用しましたが、概念は同じです...
using System;
using System.ComponentModel;
using System.Windows.Forms;
class Data : INotifyPropertyChanged{
private string name;
public string Name
{
get { return name; }
set { name = value; OnPropertyChanged("Name"); }
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this,
new PropertyChangedEventArgs(propertyName));
}
}
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Button btn1, btn2;
BindingList<Data> list = new BindingList<Data> {
new Data { Name = "Fred"},
new Data { Name = "Barney"},
};
using (Form frm = new Form
{
Controls =
{
new ListBox { DataSource = list, DisplayMember = "Name",
Dock = DockStyle.Fill},
(btn1 = new Button { Text = "add", Dock = DockStyle.Bottom}),
(btn2 = new Button { Text = "edit", Dock = DockStyle.Bottom}),
}
})
{
btn1.Click += delegate { list.Add(new Data { Name = "Betty" }); };
btn2.Click += delegate { list[0].Name = "Wilma"; };
Application.Run(frm);
}
}
}