リストへの DataGridView バインディングと、レコード数を示すラベルがあります。Khashが抱えていたのと同じ問題に遭遇しました。(だから私は彼の称号を盗む)。グリッドで追加または削除操作を行っても、ラベルは更新されません。
Sung の回答であるファサード ラッパーに基づいて、継承BindingList
および実装するカスタム リストを作成しますINotifyPropertyChanged
。
public class CountList<T> : BindingList<T>, INotifyPropertyChanged
{
protected override void InsertItem(int index, T item)
{
base.InsertItem(index, item);
OnPropertyChanged("Count");
}
protected override void RemoveItem(int index)
{
base.RemoveItem(index);
OnPropertyChanged("Count");
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
ただし、これはバインド時に例外をスローします。
Cannot bind to the property or column Count on the DataSource.
Parameter name: dataMember
以下は私のバインディングコードです:
private CountList<Person> _list;
private void Form1_Load(object sender, EventArgs e)
{
_list = new CountList<Person>();
var binding = new Binding("Text", _list, "Count");
binding.Format += (sender2, e2) => e2.Value = string.Format("{0} items", e2.Value);
label1.DataBindings.Add(binding);
dataGridView1.DataSource = _list;
}
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
任意の提案をいただければ幸いです。ありがとうございました。