我在Xamarin工作。我有一个可观察的集合。这个可观察的集合有一些图片。在集合中,1张图片是封面照片。我可以将任何照片固定为封面照片。为此,我有一个名为“UpdatePinned”的功能。
在我的可观察收藏中,索引0用于添加图片(这意味着相机或画廊选项)。索引1用于封面照片。每次添加图片时,我都会将创建的日期时间存储在本地DB中。
以前,当我更新pin时,我只是改变了图片的索引位置。从集合中删除图片并插入索引位置1。
await App.RunOnMainThread(() =>
{
PicturesDetails.Remove(picture);
PicturesDetails.Insert(1, picture);
});
但现在每当用户更新pin并将任何照片作为封面照片时,我希望按创建日期降序排序其余图片(索引1之后)。
我这样更新代码
//Move pinned picture to index 1 and Sort unpinned pictures (all the items after index 1) in descending order by created date property.
var PictureVMs = PicturesDetails.ToList();
PictureVMs.Remove(picture);
PictureVMs.Insert(1, picture);
var PictureVMsWithNoCoverPhoto = PictureVMs.Skip(2).OrderByDescending(x => x.CreatedDateTime).ToList();
PictureVMs.RemoveRange(2, PicturesDetails.Count-2);
PictureVMs.AddRange(PictureVMsWithNoCoverPhoto);
await App.RunOnMainThread(() =>
{
PicturesDetails.Clear();
PicturesDetails = new ObservableCollection<PictureVM>(PictureVMs);
});
我必须将其转换为临时列表对象,并在操作后再次将其转换回可观察集合。
有没有优化的方法来做同样的事情?
1条答案
按热度按时间vlurs2pr1#