xamarin 跳过前2个索引后,按降序对Observable Collection排序

dffbzjpn  于 2023-04-03  发布在  其他
关注(0)|答案(1)|浏览(102)

我在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);
            });

我必须将其转换为临时列表对象,并在操作后再次将其转换回可观察集合。
有没有优化的方法来做同样的事情?

vlurs2pr

vlurs2pr1#

var PictureVMs = PicturesDetails.ToList();
PictureVMs.Remove(picture);
PictureVMs.Insert(1, picture);
PictureVMs = PictureVMs.Take(2).Concat(
    PicturesDetails.Skip(2)
    .OrderByDescending(x => x.CreatedDateTime));

await App.RunOnMainThread(() =>
        {
            PicturesDetails.Clear();
            PicturesDetails = new ObservableCollection<PictureVM>(PictureVMs);
        });

相关问题