Поскольку в коллекции нет механизма Sort
, это, вероятно, наиболее практичный вариант. Вы можете реализовать сортировку вручную, используя Move
и т. Д., Но, вероятно, это будет медленнее, чем при этом.
var arr = list.OrderBy(x => x.SomeProp).ToArray();
list.Clear();
foreach (var item in arr) {
list.Add(item);
}
Кроме того, вы можете рассмотреть возможность отмены привязки любых элементов пользовательского интерфейса при сортировке (с помощью любого из подходов), которую вы платите только за повторную привязку один раз:
Интересно, что если бы это было BindingList<T>
, вы могли бы использовать RaiseListChangedEvents
, чтобы минимизировать количество уведомлений:
var arr = list.OrderBy(x => x).ToArray();
bool oldRaise = list.RaiseListChangedEvents;
list.RaiseListChangedEvents = false;
try {
list.Clear();
foreach (var item in arr) {
list.Add(item);
}
} finally {
list.RaiseListChangedEvents = oldRaise;
if (oldRaise) list.ResetBindings();
}