基本上我在我的类中有一个Observable Collection和一个静态整数,跟踪集合中有多少元素。集合中的每个元素都有一个唯一的ID,从1开始到元素总数。
我想要做的是,取出一个带有随机ID的元素,然后相应地更改后续元素的ID,使ID从1连续运行到元素总数。因此,例如,如果我有5个元素并删除ID号为3的元素,那么我需要一些代码来修改ID为4的元素的ID属性并将其更改为3,并修改ID为5的元素的ID属性并将其更改为4,因此所有ID都按顺序排列。
我想做这样的事情:
var matches = MyObject.MyCollection.Where((myobject) => myobject.UniqueId.Equals(ID_value_of_removed_item_plus_one))
foreach (MyDataType CollectionItem in matches)
{
MyDataType CollectionItemCopy = ColectionItem
CollectionItemCopy.UniqueId--;
MyCollection.Remove(CollectionItem);
MyCollection.Add(CollectionItemCopy);
}
但是,我无法帮助,但想象一下这是一种更有效的方法。我知道Observable Collection对于这种应用程序来说不是一个合适的选择,但事实是元素绑定到ListView,所以我不能使用任何其他类型的泛型集合。
答案 0 :(得分:1)
这是你想要的吗?
class Entity
{
public int Id { get; set; }
public string Name { get; set; }
}
var collection = new ObservableCollection<Entity>
{
new Entity { Id = 1, Name = "Apple" },
new Entity { Id = 2, Name = "Peach" },
new Entity { Id = 3, Name = "Plum" },
new Entity { Id = 4, Name = "Grape" },
new Entity { Id = 5, Name = "Orange" },
};
collection.CollectionChanged += (sender, args) =>
{
if (args.Action == NotifyCollectionChangedAction.Remove || args.Action == NotifyCollectionChangedAction.Replace)
{
for (var i = args.OldStartingIndex; i < collection.Count; i++)
{
collection[i].Id--;
}
}
};
collection.RemoveAt(2); // Grape.Id == 3, Orange.Id == 4
答案 1 :(得分:0)
立即获取所有匹配,然后减去其中一个ID。由于您只是添加和删除相同的项目,因此无需再次删除和添加它。最后,删除原始项目。
var matches = MyObject.MyCollection.Where(myobject => myobject.UniqueId >= ID_value_of_removed_item_plus_one);
foreach (MyDataType CollectionItem in matches)
{
CollectionItem.UniqueId--;
}
MyCollection.Remove(itemToDelete);