[英]Deleting from an Observable collection
我有一個可觀察的集合,我想從中刪除一個特定的實例項。
例如
data[1].ChildElements[0].ChildElements[1].ChildElements.RemoveAt(1);
但是,這很好用,因為這與從 treeview 中刪除子元素有關,我想根據單擊的 treeview 的級別動態創建上述語句。 所以我可以想要:
data[0].ChildElements[1].ChildElements.RemoveAt(0);
或者
data[1].ChildElements.RemoveAt(0);
我知道我存儲在列表中的父項的 ID,例如
0 1 0
或1,0
我的問題是,當我不知道列表集合中有多少項目時,我該如何創建上述語句?
謝謝。
有時老學校做得最好。
static void RemoveByPath(YourClass currentNode, int[] path)
{
for (int i = 0; i < path.Length - 1; i++)
{
currentNode = currentNode.ChildElements[path[i]];
}
currentNode.ChildElements.RemoveAt(path[path.Length-1]));
}
如果您沒有“根” YourClass
實例(我懷疑您有,但以防萬一)添加:-
static void RemoveByPath(IList<YourClass> data, int[] path)
{
if (path.Length > 1)
{
RemoveByPath(data[path[0]], path.Skip(1).ToArray());
}
else
{
data.RemoveAt(path[0]);
}
}
那么如果你確實想要一些聰明的東西,你可以把它們變成擴展方法。
我會使用遞歸函數,它可以為您提供實際/當前節點,您可以找到綁定的 ObservableCollection 並從中刪除。
像這樣的東西:
private void RemoveSpecificInstance(IList<int> ids, ObservableCollection<SomeClass> currentCollection)
{
if (ids.Count == 0)
{
// The initial collection didn't have children
return;
}
else if (ids.Count == 1)
{
currentCollection.RemoveAt(ids.Single());
}
else
{
int index = ids.First();
RemoveSpecificInstance(ids.Skip(1).ToList(), currentCollection[index].ChildElements);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.