カスタム コレクションに INotifyCollectionChanged を実装すると、DataGridView が CollectionChanged イベントをサブスクライブすることを念頭に置いていました。
My Collection は IListSource と INotifyCollectionChanged を実装し、内部 BindingList を持っています。BindingList から ListChanged イベントをサブスクライブし、OnCollectionChanged メソッドを呼び出して CollectionChanged イベントを発生させます。
おそらく、上記を達成するためのより良い方法があり、それを聞いてうれしいです. ただし、現時点での私の主な関心事は、この並べ替えメソッドが呼び出された後に DataGridView を更新することです。
public void Sort(List<SortField> sortFields)
{
if(sortFields == null || sortFields.Count == 0) return;
IOrderedEnumerable<T> res;
if (sortFields[0].Ascending)
res = _items.OrderBy(o => o[sortFields[0].Name]);
else
res = _items.OrderByDescending(o => o[sortFields[0].Name]);
for (int x = 1; x < sortFields.Count; x++)
if (sortFields[x].Ascending)
res = res.ThenBy(o => o[sortFields[x].Name]);
else
res = res.ThenByDescending(o => o[sortFields[x].Name]);
Items = new BindingList<T>(res.ToList());
OnListChanged(this, new ListChangedEventArgs(ListChangedType.Reset, null));
}
DataGridView が CollectionChanged イベントをサブスクライブするという私の信念は間違っていますか、それとも何か間違ったことをしていますか?