How to sort LongListSelector in Windows Phone

I would like to be able to sort the data bound to my LongListSelector in ascending or descending order. I am having trouble binding sorted data to my LongListSelector. Initially, without trying to implement my solution, my solution worked, but I believe that I have something missing when sorting. I also tried How to sort LongListSelector using CollectionViewSource with no luck. What is the best way to sort LongListSelector?

MainPage.xaml

<phone:LongListSelector x:Name="Recent" Margin="0,0,0,72" LayoutMode="Grid" GridCellSize="108,108" SelectionChanged="recent_SelectionChanged"> 

MainPage.xaml.cs (OLD)

 protected override void OnNavigatedTo(NavigationEventArgs e) { Recent.ItemsSource = App.PictureList.Pictures; //works! if (Settings.AscendingSort.Value) { //Recent.ItemsSource = App.PictureList.Pictures.OrderBy(x => x.DateTaken); //Error stating Cannot implicityly convert type 'SYstem.Linq.IOrderedEnumerable to System.Collections.IList Recent.ItemsSource = App.PictureList.Pictures.OrderBy(x => x.DateTaken) as System.Collections.IList; //No error but nothing is displayed } else { //Recent.ItemsSource = App.PictureList.Pictures.OrderByDescending(x => x.DateTaken); Recent.ItemsSource = App.PictureList.Pictures.OrderByDescending(x => x.DateTaken) as System.Collections.IList; } } 

** EDIT

MainPage.xaml.cs (NEW)

 protected override void OnNavigatedTo(NavigationEventArgs e) { //Recent.ItemsSource = App.PictureList.Pictures; //Works with deleting, not sorted. if (Settings.AscendingSort.Value) { //Recent.ItemsSource = App.PictureList.Pictures.OrderBy(x => x.DateTaken).ToList(); //Recent.ItemsSource = new ObservableCollection<Models.Picture>(App.PictureList.Pictures.OrderBy(x => x.DateTaken)); App.PictureList.Pictures = new ObservableCollection<Models.Picture>(App.PictureList.Pictures.OrderBy(x => x.DateTaken)); //Error Recent.ItemsSource = App.PictureList.Pictures; } else { //Recent.ItemsSource = App.PictureList.Pictures.OrderByDescending(x => x.DateTaken).ToList(); //Recent.ItemsSource = new ObservableCollection<Models.Picture>(App.PictureList.Pictures.OrderByDescending(x => x.DateTaken)); App.PictureList.Pictures = new ObservableCollection<Models.Picture>(App.PictureList.Pictures.OrderByDescending(x => x.DateTaken)); //Error Recent.ItemsSource = App.PictureList.Pictures; } } 

App.xaml.cs

 public static PictureRepository PictureList { get { return PictureRepository.Instance; } } 

PictureRepository.cs

 #region Constants public const string IsolatedStoragePath = "Pictures"; #endregion #region Fields //private readonly ObservableCollection<Picture> _pictures = new ObservableCollection<Picture>(); private ObservableCollection<Picture> _pictures = new ObservableCollection<Picture>(); #endregion #region Properties public ObservableCollection<Picture> Pictures { //get { return _pictures; } get { return _pictures; } set { new ObservableCollection<Picture>(_pictures); } } #endregion #region Singleton Pattern private PictureRepository() { LoadAllPicturesFromIsolatedStorage(); } public static readonly PictureRepository Instance = new PictureRepository(); #endregion /// <summary> /// Saves to local storage /// This method gets two parameters: the captured picture instance and the name of the pictures folder in the isolated storage /// </summary> /// <param name="capturedPicture"></param> /// <param name="directory"></param> public void SaveToLocalStorage(CapturedPicture capturedPicture, string directory) { //call IsolatedStorageFile.GetUserStoreForApplication to get an isolated storage file var isoFile = IsolatedStorageFile.GetUserStoreForApplication(); //Call the IsolatedStorageFile.EnsureDirectory extension method located in the Common IsolatedStorageFileExtensions class to confirm that the pictures folder exists. isoFile.EnsureDirectory(directory); //Combine the pictures folder and captured picture file name and use this path to create a new file string filePath = Path.Combine(directory, capturedPicture.FileName); using (var fileStream = isoFile.CreateFile(filePath)) { using (var writer = new BinaryWriter(fileStream)) { capturedPicture.Serialize(writer); } } } /// <summary> /// To load all saved pictures and add them to the pictures list page /// </summary> public CapturedPicture LoadFromLocalStorage(string fileName, string directory) { //To open the file, add a call to the IsolatedStorageFile.GetUserStoreForApplication var isoFile = IsolatedStorageFile.GetUserStoreForApplication(); //Combine the directory and file name string filePath = Path.Combine(directory, fileName); //use the path to open the picture file from the isolated storage by using the IsolatedStorageFile.OpenFile method using (var fileStream = isoFile.OpenFile(filePath, FileMode.Open, FileAccess.Read)) { //create a BinaryReader instance for deserializing the CapturedPicture instance using (var reader = new BinaryReader(fileStream)) { var capturedPicture = new CapturedPicture(); //create a new instance of the type CapturedPicture called CapturedPicture.Deserialize to deserialize the captured picture and return it capturedPicture.Deserialize(reader); return capturedPicture; } } } /// <summary> /// To load all the pictures at start time /// </summary> private void LoadAllPicturesFromIsolatedStorage() { //add call to the IsolatedStorageFile.GetUserStoreForApplication to open an isolated storage file var isoFile = IsolatedStorageFile.GetUserStoreForApplication(); //Call the IsolatedStorageFile.EnsureDirectory extension method located in the Common IsolatedStorageFileExtensions class to confirm that the pictures folder exists isoFile.EnsureDirectory(IsolatedStoragePath); //Call the IsolatedStorageFile.GetFileNames using the pictures directory and *.jpg as a filter to get all saved pictures var pictureFiles = isoFile.GetFileNames(Path.Combine(IsolatedStoragePath, "*.jpg")); //var pictureFiles = isoFile.GetFileNames(Path.Combine(IsolatedStoragePath, "")); //Iterate through all the picture files in the list and load each using the LoadFromLocalStorage you created earlier foreach (var pictureFile in pictureFiles) { var picture = LoadFromLocalStorage(pictureFile, IsolatedStoragePath); _pictures.Add(picture); } } 
+4
source share
1 answer

Replace Recent.ItemsSource = App.PictureList.Pictures.OrderBy (x => x.DateTaken) with System.Collections.IList;

by Recent.ItemsSource = App.PictureList.Pictures.OrderBy (x => x.DateTaken) .ToList ()

When you use OrderBy, it returns an IEnumerable, not a list, so App.PictureList.Pictures.OrderBy(x => x.DateTaken) as System.Collections.IList will just return null

+2
source

Source: https://habr.com/ru/post/1502296/


All Articles