ストアアプリで良く使うObservableCollectionですが、
並べかえ機能が備わっていないようでやり方調べたところLINQを使うとうまくいくようです。
実際にやってみたのでメモ残します。
コレクションに入れるクラス作ります。
後で結果出力がわかりやすいようにToStringをオーバーライドしてますが、特に気にしないでください。
class MyClass { public int No { get; set; } public string Name { get; set; } public override string ToString() { return "No:" + No + ",Name:" + Name; } }
先ほど作ったクラスを作ってテストプログラム書いてみました。
//ObservableCollection作成 ObservableCollection<MyClass> myCollection = new ObservableCollection<MyClass> { new MyClass(){No=1,Name="ひかり"}, new MyClass(){No=2,Name="こだま"}, new MyClass(){No=3,Name="のぞみ"} }; Console.WriteLine("[そのまま出力]"); foreach (MyClass c in myCollection){Console.WriteLine(c);} Console.WriteLine("[名前順で並べ替えて出力]"); //並べ替え ObservableCollection<MyClass> orderedByName = new ObservableCollection<MyClass>(myCollection.OrderBy(n => n.Name)); //出力 foreach (MyClass c in orderedByName){ Console.WriteLine(c);} Console.WriteLine("[番号順で逆順で並べ替えて出力]"); //並べ替え ObservableCollection<MyClass> orderedById = new ObservableCollection<MyClass>(myCollection.OrderByDescending(n => n.No)); //出力 foreach (MyClass c in orderedById) { Console.WriteLine(c); }
ちゃんと並び替えできてるようです。
[そのまま出力] No:1,Name:ひかり No:2,Name:こだま No:3,Name:のぞみ [名前順で並べ替えて出力] No:2,Name:こだま No:3,Name:のぞみ No:1,Name:ひかり [番号順で逆順で並べ替えて出力] No:3,Name:のぞみ No:2,Name:こだま No:1,Name:ひかり