所以我有一个小组管理器,它由一对ListBoxes,2个BindingLists和自定义类组成。摘要看起来像这样
class MyClass
{
public int ItemId;
public string Name;
public string Other;
...
}
...
BindingList<MYClass> allItems = new BindingList<MyClass>();
BindingList<MyClass> selectedItems = new BindingList<MyClass>();
...
ListBox1.Datasource = allItems;
ListBox1.DisplayMember = "Name";
ListBox1.ValueMember = "ItemId:;
...
ListBox2.DataSource = selectedItems;
ListBox2.DisplayMember = "Name";
ListBox2.ValueMember = "ItemId";
...
private void MoveItem(MyObject item, BindingList<MyClass> fromList, BindingList<MyClass> toList)
{
toList.Add(item);
fromList.Delete(item);
}
...
一切都运作良好,问题纯粹是装饰性的。当项目在列表之间移动时,它们在相应列表中占据新位置,因此ListBox中的新位置被假定在ListBox的末尾。这可能会让用户感到困惑。当我在ListBoxes上启用Sorted参数时,显示顺序正确但移动了错误的对象。所以我的问题是 - 如何通过ItemId订购商品,以便他们在BindingList和各自的ListBox中保持其位置一致。