1

次のような Car クラスがあるとします。

class car 
{
string model;
int position;
}   

位置は、基本的にリスト内の位置を反映する 1 から n までの数値です。リストに 2 台の車がある場合、それらの位置は 1 2 になります。ここで、UI でリスト内のこれらの車の順序を変更し、後で使用できるようにプロパティの変更を反映したいと考えています。
だから私はいくつかの行を持つテーブルを持っています:

Car1  1  
Car2  2     
Car3  3   
Car4  4   

ここで、項目を並べ替えたい場合は、Car4 をドラッグして位置 2 (Car1 の直後) に配置します。
したがって、私のポジションは次のようになります。

Car1  1  
Car4  2     
Car2  3   
Car3  4    

したがって、私がやりたいことは、リスト内の 1 つの項目を更新することであり、他のすべての項目は自動的に更新されます。

4

2 に答える 2

3

そのような状況での最善のアプローチは、位置をまったく保存せず、代わりにそれを暗示することです。model属性を保持し、 position. 位置、またはそれらの位置とペアになっているすべての要素のリストが必要な場合はいつでもSelect、インデックスを取る LINQ のオーバーロードを使用できます。

var carsWithIndex = carList.Select((car, index) => new {
    Car = car
,   Index = index
}).ToList();

これで、2 つの属性を持つオブジェクトのリストができました。

  • Car-carリストの要素、および
  • Indexcar- の対応するのインデックスcarList

の要素を自由に並べ替えることができcarListます。暗黙のインデックスは、再注文するたびに変更されます。インデックスが必要になるたびに、上記の LINQ 式を実行して、それぞれcarを新しいインデックスとペアにします。

于 2012-12-10T02:26:22.733 に答える
0

私はこのようなものを推測します:

BindingList<car> list = new BindingList<car>();
list.ListChanged += new ListChangedEventHandler(list_ListChanged);

void list_ListChanged(object sender, ListChangedEventArgs e)
        {
            list[e.OldIndex].position = e.NewIndex;
            for (int i = e.NewIndex; i < list.Count; i++)
            {
                list[i].position = i+1;
            }
        }
于 2012-12-10T02:29:40.820 に答える