如何在Windows Phone中对LongListSelector进行排序

我希望能够按升序或降序对绑定到LongListSelector的数据进行排序。 我无法将排序数据绑定到我的LongListSelector。 最初没有尝试实现排序,我的解决方案正在运行,但我相信在涉及排序时我遗漏了一些东西。 我还尝试了如何使用CollectionViewSource对LongListSelector进行排序而没有运气。 排序LongListSelector的最佳方法是什么?

MainPage.xaml中

 

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; } } 

**编辑

MainPage.xaml.cs(新)

 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(App.PictureList.Pictures.OrderBy(x => x.DateTaken)); App.PictureList.Pictures = new ObservableCollection(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(App.PictureList.Pictures.OrderByDescending(x => x.DateTaken)); App.PictureList.Pictures = new ObservableCollection(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 _pictures = new ObservableCollection(); private ObservableCollection _pictures = new ObservableCollection(); #endregion #region Properties public ObservableCollection Pictures { //get { return _pictures; } get { return _pictures; } set { new ObservableCollection(_pictures); } } #endregion #region Singleton Pattern private PictureRepository() { LoadAllPicturesFromIsolatedStorage(); } public static readonly PictureRepository Instance = new PictureRepository(); #endregion ///  /// Saves to local storage /// This method gets two parameters: the captured picture instance and the name of the pictures folder in the isolated storage ///  ///  ///  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); } } } ///  /// To load all saved pictures and add them to the pictures list page ///  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; } } } ///  /// To load all the pictures at start time ///  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); } } 

将Recent.ItemsSource = App.PictureList.Pictures.OrderBy(x => x.DateTaken)替换为System.Collections.IList;

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

当你使用OrderBy时,它返回一个IEnumerable而不是List,所以App.PictureList.Pictures.OrderBy(x => x.DateTaken) as System.Collections.IList只返回null