4

ここに私の最初の投稿。

選択プロセスで入力しているリスト "<"frameworkelement> があります。各フレームワーク要素には、その ZOrder を保持する uid があります。

これらを ZOrder で最低から最高に並べ替える必要があります。リストボックスを使用してこれを取得し、次のように Uid を追加できます。

            //Add Object Uid's
            ListBox lstTempOrder = new ListBox();
            foreach(FrameworkElement feObject in MainWindow.Data.SelectedObjects)
            {
                lstTempOrder.Items.Add(feObject.Uid);
            }
            //Reorder from 0 to above of the ZIndexes       
            lstTempOrder.Items.SortDescriptions.Add(new System.ComponentModel.SortDescription("", System.ComponentModel.ListSortDirection.Ascending));

しかし、List"<"FrameWorkElement> と Sort でこれを行う必要があります。

List"<"T> (SelectedObjects と CopyObjectsCollections は List"<"FrameWorkElement>" リストです。

            foreach(FrameworkElement feObject in MainWindow.Data.SelectedObjects)
            {
                MainWindow.Data.CopyObjectsCollection.Add(feObject);
            }

CollectionViewSource と IComparer を見てきましたが、まったく意味がありません。

4

1 に答える 1

4

私はあなたの質問を読み飛ばしたかもしれませんが、単に並べ替えたいだけならList<T>、メソッドを使用してみませんLinQ OrderByか?

MainWindow.Data.CopyObjectsCollection = 
    MainWindow.Data.CopyObjectsCollection.OrderBy(f => f.Uid).ToList();

それが要件に対して間違った方法でソートする場合は、これを使用できます。

MainWindow.Data.CopyObjectsCollection = 
    MainWindow.Data.CopyObjectsCollection.OrderByDescending(f => f.Uid).ToList();

更新 >>>

OrderByLinQ拡張メソッドです。using System.Linq;クラスの先頭に追加して使用します。fオブジェクトのインスタンスに関連していますFrameworkElement。上記のラムダ式は、基本的に「Uidプロパティ値を使用してソートする」ことを意味します。

更新 2 >>>

OrderByメソッドは元のコレクションを変更しません...そのため、私の例ではコレクションをOrderByメソッドの結果に設定しています。次の基本的な例を参照してください。

List<FrameworkElement> elements = new List<FrameworkElement>();
elements.Add(new FrameworkElement() { Uid = "Object1003-1" });
elements.Add(new FrameworkElement() { Uid = "Object1002-2" });
elements.Add(new FrameworkElement() { Uid = "Object1002-1" });
elements.Add(new FrameworkElement() { Uid = "Object1001-1" });
elements.Add(new FrameworkElement() { Uid = "Object1001-3" });
elements.Add(new FrameworkElement() { Uid = "Object1001-2" });
string result = string.Join(", ", elements.Select(f => f.Uid));
elements = elements.OrderBy(f => f.Uid).ToList();
string orderedResult = string.Join(", ", elements.Select(f => f.Uid));

と の値を比較すると、result完全orderedResultに順序付けされていることがわかります。

更新 3 (そしてできれば最後の更新) >>>

ラムダ式について学ぶ必要があります...詳細については、MSDN のラムダ式 (C# プログラミング ガイド)ページを参照してください。

elements = elements.OrderBy(f => f.Uid).ToList();

このfLambda 式の は、この式で ' ' の前に宣言さてい=>ます。Exceptionsこれらのパラメーターに のように1 文字で名前を付けるのがかなり標準的ですが、任意の名前を付けることができます。

elements = elements.OrderBy(frameworkElement => frameworkElement.Uid).ToList();
于 2013-08-30T08:51:40.857 に答える