Updating sort order of items in a LazyVGrid

I have a grid setup where I'm displaying multiple images which is working fine. Images are ordered by the date they're added, newest to oldest.

I'm trying to set it up so that the user can change the sort order themselves but am having trouble getting the view to update.

I'm setting the fetch request using oldest to newest as default when initialising the view, then when its appears updating the sort descriptor

struct ProjectImagesListView: View {
    @Environment(\.managedObjectContext) private var viewContext
    var project : Project

    let columns = [
        GridItem(.flexible()),
        GridItem(.flexible()),
        GridItem(.flexible()),
        GridItem(.flexible())
    ]
    
    @FetchRequest var pictures: FetchedResults<Picture>

    var body: some View {
        ScrollView {
            LazyVGrid(columns: columns) {
                ForEach(pictures) { picture in
                    NavigationLink(destination: ProjectImageDetailView(picture: picture)) {
                        if let pictureData = picture.pictureThumbnailData, let uiImage = UIImage(data: pictureData) {
                            Image(uiImage: uiImage)
                                .resizable()
                                .scaledToFit()
                                .frame(height: 100)
                        } else {
                            Image("missing")
                                .resizable()
                                .scaledToFit()
                                .frame(height: 100)
                        }
                    }
                }
            }
        }
        .navigationBarTitle("\(project.name ?? "") Images", displayMode: .inline)
        .onAppear() {
            guard let sortOrder = getSettingForPhotoOrder() else { return }
            guard let sortOrderValue = sortOrder.settingValue else { return }
            NSLog("sortOrderPhotos: \(String(describing: sortOrder.settingValue))")
            
            if sortOrderValue == "Newest" {
                NSLog("sortOrderPhotos: Change from default")
                let newSortDescriptor = NSSortDescriptor(keyPath: \Picture.dateTaken, ascending: false)
                pictures.nsSortDescriptors = [newSortDescriptor]
            }
        }
    }

    func getSettingForPhotoOrder() -> Setting? {
        let fetchRequest: NSFetchRequest<Setting> = Setting.fetchRequest()
        fetchRequest.predicate = NSPredicate(format: "name = %@", "photoSortOrder")
        fetchRequest.fetchLimit = 1
        do {
            let results = try viewContext.fetch(fetchRequest)
            return results.first
        } catch {
            print("Fetching Failed")
        }
        
        return nil
    }

    init(project: Project) {
        self.project = project
        
        _pictures = FetchRequest(
            entity: Picture.entity(),
            sortDescriptors: [
                NSSortDescriptor(keyPath: \Picture.dateTaken, ascending: true)
            ],
            predicate: NSPredicate(format: "project == %@", project)
        )
    }
}
Updating sort order of items in a LazyVGrid
 
 
Q