使用通用树数据结构将分层数据与模板绑定

时间:2013-08-28 16:53:09

标签: wpf tree hierarchicaldatatemplate

如何使用分层数据模板将树数据结构绑定到树列表控件。区别在于,不是为层次结构中的每个级别创建不同的类型,而是打算仅使用一种类型“节点”,该类型由“类型”枚举区分,指示其在层次结构中的级别。这是一种可行的方法吗?如何使用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;
        }
    }

2 个答案:

答案 0 :(得分:1)

您需要使用DataTemplateSelectorMSDN描述了如何使用一个。即使该示例适用于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;
        }
    }