У меня есть список, чья панель элементов настроена на обертку. Я хочу, чтобы всякий раз, когда новый элемент добавлялся в список, моя коллекция сортировалась, и процесс должен отображаться в пользовательском интерфейсе. Я имею в виду, что пользователь должен видеть этот необычный эффект, чтобы помочь им определить, что элемент сортируется. Я посмотрел несколько постов по stackoverflow, и они предлагают использовать CollectionViewSource. Однако мой источник данных привязан к ObservableCollection во ViewModel.
Сначала я написал этот код. Это работает, однако, поскольку новая коллекция связана, я не вижу такого необычного эффекта, когда элементы в контейнере просто перемещаются в свою новую позицию из исходной позиции: -
var photoList = PhotosToUpload.ToList<Photo>();
photoList.Sort(new PhotoSorter());
PhotosToUpload = new ObservableCollection<Photo>(photoList);
Это мой класс: -
public class PhotoSorter : IComparer<Photo>
{
public int Compare(Photo x, Photo y)
{
return x.PhotoByteArr.Length - x.PhotoByteArr.Length;
}
}
Тогда я написал простой алгоритм сортировки пузырьков. Это дает желаемый эффект, но я не знаю, почему это занимает слишком много времени. Я знаю, что это самый неэффективный алгоритм, который может придумать кто угодно, но сортировка 10 элементов не должна занимать больше секунды. Здесь это занимает 4-5 секунд.
for (int i = 0; i < PhotosToUpload.Count; i++)
{
for (int j = 0; j < PhotosToUpload.Count - 1 - i; j++)
{
if (PhotosToUpload[j].PhotoByteArr.Length > PhotosToUpload[j + 1].PhotoByteArr.Length)
{
Photo photo = PhotosToUpload[j];
PhotosToUpload[j] = PhotosToUpload[j + 1];
PhotosToUpload[j + 1] = photo;
}
}
}
Кто-нибудь может сказать мне, что я могу сделать лучше всего на данный момент? и почему сортировка пузырьков занимает так много времени даже с 10 предметами?