2011-06-06 55 views

回答

2

是的,你可以从树节点继承并创建自己的行为。像这样。

public class RootNode : TreeNode 
{ 
    public List<ChildNode> ChildNodes { get; set; } 

    public RootNode() 
    { 
     ChildNodes = new List<ChildNode>(); 
    } 

    public void PopulateChildren() 
    { 
     this.Nodes.Clear(); 

     var visibleNodes = 
      ChildNodes 
      .Where(x => x.Visible) 
      .ToArray(); 

     this.Nodes.AddRange(visibleNodes); 
    } 

    //you would use this instead of (Nodes.Add) 
    public void AddNode(ChildNode node) 
    { 
     if (!ChildNodes.Contains(node)) 
     { 
      node.ParentNode = this; 
      ChildNodes.Add(node); 
      PopulateChildren(); 
     } 
    } 

    //you would use this instead of (Nodes.Remove) 
    public void RemoveNode(ChildNode node) 
    { 
     if (ChildNodes.Contains(node)) 
     { 
      node.ParentNode = null; 
      ChildNodes.Remove(node); 
      PopulateChildren(); 
     } 

    } 
} 

public class ChildNode : TreeNode 
{ 
    public RootNode ParentNode { get; set; } 
    private bool visible; 
    public bool Visible { get { return visible; } set { visible = value;OnVisibleChanged(): } } 
    private void OnVisibleChanged() 
    { 
     if (ParentNode != null) 
     { 
      ParentNode.PopulateChildren(); 
     } 
    } 
} 
1

不,没有办法让节点不可见。您应该将其删除而不是隐藏。之后您将不得不将其添加回原来的位置。