【问题标题】:Binding hierarchical data with templates using a generic Tree data structure使用通用树数据结构将分层数据与模板绑定
【发布时间】:2013-08-31 01:40:56
【问题描述】:

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

【问题讨论】:

    标签: wpf tree hierarchicaldatatemplate


    【解决方案1】:

    您将需要使用DataTemplateSelectorMSDN 描述了如何使用一个。即使示例是针对ListBox,您也可以使用TreeView 来执行此操作。

    【讨论】:

      【解决方案2】:

      我创建了一个始终返回相同模板的数据选择器。这将为自引用数据的每个节点返回相同的模板。

       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;
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-12
        • 1970-01-01
        • 1970-01-01
        • 2010-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多