我有Listbox的項目面板設置爲wrappanel。我希望每當一個新項目被添加到列表框時,我的集合應該被排序並且該過程應該在UI上可見。我的意思是用戶應該能夠看到這種奇特的效果,以幫助他們識別物品正在分類。我看了一些關於stackoverflow的帖子,他們建議使用CollectionViewSource。但是我的itemsource綁定到ViewModel中的ObservableCollection。如何對ObservableCollection <T>進行排序,以便我的UI還可以看到排序過程?
首先我寫了這段代碼。但它可以作爲一個新的集合勢必我看不到花哨的效果,其中在容器中的項目只是移動到新的位置從原來的位置: -
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件物品?