T型がバインド対象のプロパティを実装しているときに有用です。またIRaiseItemChangedEventsインターフェイスを実装するため、DataGridViewへ変更を反映しやすいです。
[System.Serializable] public class BindingList<T> : System.Collections.ObjectModel.Collection<T>, System.ComponentModel.IBindingList, System.ComponentModel.ICancelAddNew, System.ComponentModel.IRaiseItemChangedEvents
BindingList<int> list1 = new BindingList<int>(); list1.Add(5);
コンストラクタにコレクションを渡した場合はその参照が格納されるため、変更が相互に作用します。BindingList - BindingList.cs
List<int> source2 = new List<int>(new[] { 1, 2, 3 }); BindingList<int> list2 = new BindingList<int>(source2); list2.Add(5); int sourceCount = source2.Count; // 4 source2.Add(6); int listCount = list2.Count; // 5
読み取り専用のコレクションを渡した場合は、要素の追加や削除はできません。
int[] source3 = new[] { 1, 2, 3 };
BindingList<int> list3 = new BindingList<int>(source3);
list3.Add(5); // NotSupportedException「コレクションは読み取り専用です。」
並べ替えを可能とするにはBindingList<T>を継承したクラスを作成し、SupportsSortingCoreプロパティでtrueを返し、ApplySortCore()を実装します。
BindingList<T>.ResetBindings()は、BindingSource.ResetBindings(Boolean)にfalseを渡して呼び出すのと同じです。 ResetBindings - BindingList.cs ResetBindings - BindingSource.cs