-3
我正在製作一個filtereditems類,它將在WPF中顯示爲樹形視圖。 filtereditems類僅包含來自包含特定條件的treeitems類的特定節點項。我能夠克隆所有樹項目並將它們添加到filtereditems列表中。從那裏我找到不符合標準的節點並適當地刪除它們。不過,我發現使用克隆使我無法刪除這些項目。有什麼我應該知道的克隆項目,爲什麼他們不能從我的收藏中刪除? (希望這可以幫助任何人在我同樣的困境):從列表中刪除克隆的節點
public class Node: INotifyPropertyChanged, ICloneable
{
public Name { get;set;}
public ID {get;set;}
public ParentNode {get;set;}
public ObservableCollection<Nodes> ChildNodes{get;set;}
public object Clone()
{
Node toReturn = new Node();
toReturn.Name = this.Name;
toReturn.ID = this.ID;
toReturn.ParentNode = this.ParentNode;
foreach (Node child in this.ChildNodes)
{
toReturn.ChildNodes.Add((Node) child.Clone());
}
return toReturn;
}
}
public void filterStart(ChildNodesListViewDataSource _filterStart)
{
if (this.FilterString != null && this.Entity != null)
{
this.TotalItemsNumber = 0;
this.FilterItemsNumber = 0;
this.FilterTreeItems.Clear();
foreach (Node y in TreeItems)
{
this.FilterTreeItems.Add((Node)y.Clone());
foreach (Node x in FilterTreeItems)
{
FilterRoot(x);
}
}
TakeOutTrash();
public bool FilterRoot(Node FilterItems)
{
bool HasMatchingChildren = false;
if (FilterItems.ChildNodes != null || FilterItems.ChildNodes.Count !=0)
{
foreach (Node FilterItemsComponenents in FilterItems.ChildNodes)
{
if (FilterRoot(FilterItemsComponenents))
{
HasMatchingChildren = true;
}
}
}
string NameOfFilterItem = FilterItems.Name.ToUpper();
string FilterStringUpperCase = FilterString.ToUpper();
bool FilterStringCheck = NameOfFilterItem.Contains(FilterStringUpperCase);
if (!FilterStringCheck && !HasMatchingChildren)
{
trimIDs.TrashCan.Add(FilterItems);
return false;
}
else
{
return true;
}
}
public void TakeOutTrash()
{
foreach (Node node in trimIDs.TrashCan)
{
this.FilterTreeItems.Remove(node);
}
}
public class TrimIDs
{
public IList<ComponentNodeViewModel> TrashCan { get; set;}
{
TrashCan = new List<ComponentNodeViewModel>();
}
}
你爲什麼要克隆呢? – FINDarkside
把你的代碼請澄清你的問題 –
我克隆他們,因爲TreeItems和FilterTreeItems類都是指針,並且由於創建這些類的方式刪除節點是過濾樹最簡單的方法。然而,除了TakeOutTrash方法之外,所有的邏輯都適用於過濾,我無法實際刪除(節點)。即使我的代碼達到了這種方法。 –