如何使用分层数据模板将树数据结构绑定到树列表控件。区别在于,不是为层次结构中的每个级别创建不同的类型,而是打算仅使用一种类型“节点”,该类型由“类型”枚举区分,指示其在层次结构中的级别。这是一种可行的方法吗?如何使用TreeListControl显示数据。
public class TreeNode<T> where T : new()
{
public TreeNode<T> Parent { get; set; }
public IList<TreeNode<T>> Children { get; set; }
protected TreeNodeType Type { get; set; }
public T Current { get; set; }
public TreeNode()
{
}
public TreeNode(TreeNodeType type)
{
this.Type = type;
this.Current = new T();
this.Children = new List<TreeNode<T>>();
}
public void AddChildren(TreeNode<T> child)
{
child.Parent = this;
this.Children.Add(child);
}
public override string ToString()
{
return string.Format("Type :{0} Name :{1}", this.Type, this.Current);
}
}
/// <summary>
/// Tree node type
/// </summary>
public enum TreeNodeType
{
Manager = 0,
Employee,
}
public class EmployeeNode
{
public string Name { get; set; }
public override string ToString()
{
return this.Name;
}
}
答案 0 :(得分:1)
您需要使用DataTemplateSelector
。 MSDN描述了如何使用一个。即使该示例适用于ListBox
,您也可以使用TreeView
。
答案 1 :(得分:0)
我创建了一个始终返回相同模板的数据选择器。这将为自引用数据的每个节点返回相同的模板。
public class HierarchialDataTemplateSelector : DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
FrameworkElement element = container as FrameworkElement;
if (element != null && item != null)
{
return element.FindResource("HierarchialDataTemplate") as DataTemplate;
}
return null;
}
}