Самый простой способ реализовать это - модель или модель представления.Например, в вашем классе Node
вы можете реализовать следующие свойства:
public Collection<Node> Siblings { /* see below */ }
public Collection<Node> Children { get; set; }
public Node Parent { get; set; }
public int Position
{
get
{
return (Parent == null)
? 0 // I don't like magic numbers, but I don't want to make this an int? either
: Siblings.IndexOf(this) + 1;
}
}
public string Rank
{
get
{
return (Parent == null)
? Position.ToString()
: Parent.Rank + "." + Position.ToString();
}
}
Обычно простейшим способом реализации свойства Siblings
является
public Collection<Node> Siblings
{
get
{
return (Parent == null)
? null
: Parent.Children;
}
}
.не работает в случае, когда существует коллекция узлов верхнего уровня, которая не является частью иерархии узлов, как это.Вы можете подделать это, создав корневой объект Node
, который не отображается в вашем пользовательском интерфейсе - в этом случае вы бы связали TreeView
со свойством Children
корневого узла и реализовали Rank
следующим образом:
public string Rank
{
get
{
if (Parent == null)
{
return null;
}
if (Parent.Parent == null)
{
return Position.ToString();
}
return Parent.Rank + "." + Position.ToString();
}
}