1

ListCollectionViewオブジェクトを使用して、アイテムのリストを表示しています。現在、これらのリストのうち 2 つを含む画面を作成しcompleteListます。ここで可能なアクションはsortedList

  • completeListの項目のいずれかを追加または削除しますsortedList
  • アイテムを上下に移動sortedList
  • の内容を保存しますsortedList

さて、私の質問はこれです:定義された位置にアイテムを挿入する可能性はありますか?sortedList

現在、現在マークされているアイテムに関係なく、それらは常にリストの最後に追加されます。私はそれを回避する方法を見つけられませんでした。リストからそれらを削除し、新しいアイテムを追加してから、保存されているすべてのアイテムを正しい順序で再度追加します。

ListCollectionView はそのような機能を提供していますか、それとも別の CollectionView クラスで機能しますか?

4

1 に答える 1

2

あなたは実際に、論理的な矛盾を求めています。ListCollectionViewアルファベット順にソートされているとします:

American
Continental
Festival
Imperial
Tower
Worldwide

Luxorとの間に挿入できるようにする必要がAmericanありContinentalますか? ビューがソートされている場合ではありません。アイテムが移動できる場所は 1 つだけです。また、ビューのどこに表示されるかは、基になるリストのどこに表示されるかとは無関係です。

アプリケーションについて詳しく知らなければ、何を提案すればよいかを正確に知ることは困難です。ただし、コレクション ビューが並べ替えられている場合、アイテムをビューの特定の場所に表示する方法は、並べ替えキーに値を割り当てることです。ビューが更新されると、目的の場所にアイテムが表示されます。 .

DateTimeこれを行うかなり簡単な (そして一般的な) 方法は、データ項目クラスにプロパティを追加DateTime.Nowし、項目のコンストラクターでそれを設定し、それをビューが使用する最後の並べ替えキーにすることです。次に、新しいアイテムを追加するときに、その他のソート キー プロパティを現在選択されているアイテムの値に設定します。これを行うと、ソート キー プロパティの値を変更しない限り、新しいアイテムは常に適切な場所に表示されます。

そうは言っても、サポートしたい他の機能から、ListCollectionView呼び出しているものに a を使用するべきではないと私は信じていますsortedList。このリストはソートされていません。順序付けられていますが、まったく同じではありません。ユーザーがリスト内でアイテムを上に移動すると、実際にはその位置を変更する必要があります。

おそらくやりたいことは、リストを として実装し、、、、、、およびプロパティを公開するObservableCollectionビュー モデル クラスにラップすることです。次に、またはのandプロパティをクラスのandプロパティにバインドし、UI のボタンやハイパーリンクなどをコマンドにバインドできます。コマンドは と を使用してプロパティを操作します。は であるため、UI は同期されたままになります。ItemsSelectedItemAddNewCommandMoveUpCommandMoveDownCommandSaveCommandItemsSourceSelectedItemListBoxListViewItemsSelectedItemItemsRemoveInsertItemsObservableCollection

于 2011-07-18T18:33:39.947 に答える