0

collectionviewsourceによってユーザーに公開される監視可能なコレクションがあります。コレクション内のアイテムのプロパティの1つはsortorderです。ユーザーがこのコレクションを永続的に再利用し、変更をデータベースに伝達できるようにしようとしています。

リストボックスに表示されている個々のアイテムを再分類できるCVSが機能しています。ただし、item.sortorder == cvs.currentindexを変更する必要があり、これを行う適切な方法を見つけるのに問題があります。

編集

明らかに私は十分に明確ではありませんでした。Sortorderは、オブジェクトの一部であるDB内のフィールドであり、ユーザーがリストコントロールに表示されるアイテムの位置を制御できるようにします。表示されているアイテムの現在のインデックスと等しくなるようにsortorderフィールドの値を変更することで、将来これらのアイテムの並べ替え方法を変更できるようにユーザーに提供しようとしています。

アイテムの現在のsortorder値は3です。

ユーザーは表示されたリストアイテムを位置0(つまり最初の位置)に移動します

アイテム新しいsortorder=0元のsortorderを持つアイテムは1などになります

これは、ソートされたCVSをループし、Item.SortOrder=CVS.Item.indexを作成することで実現されます。

4

2 に答える 2

0

データベースは、クエリでorder by句を指定しない限り、通常、テーブルに追加された順序に基づいてテーブルから行を返します。データベース内の順序を変更することはお勧めできません。代わりに、パラメーター化されたクエリを使用して、ユーザー設定から取得したソートしたい列と方向を渡すなどの方法を試してください。

于 2011-08-12T12:59:22.300 に答える
0

私はそれを考え出した。

戻って、要素の位置を変更するために使用していたコードを確認しました。実際には、コレクション自体を使用しています。

private void OnDecreaseSortOrderCommandExecute()
        {
            int index = QuestionsCVS.View.CurrentPosition;
            QuestionsViewModel item = SelectedQuestionVM;

            if (item != null && index > 0)
            {
                SortableQuestionsVMCollection.RemoveAt(index);
                SortableQuestionsVMCollection.Insert(index - 1, item);
                QuestionsCVS.View.Refresh();
                QuestionsCVS.View.MoveCurrentTo(item);
            }
        }

だから私は単にこれをしました:

private void ResortSortableQuestionsVMCollection()
        {
            for (int i = 0; i < SortableQuestionsVMCollection.Count; i++)
            {
                SortableQuestionsVMCollection[i].SortOrder = i;
            }
        }

これがすべての状況で機能するかどうかはわかりませんが、これは確かに私が望んでいたことを実行しました。

于 2011-08-12T13:53:49.140 に答える