C# 在wpf中将treeviewitem显示为网格行,其中分支的深度可能不同

C# 在wpf中将treeviewitem显示为网格行,其中分支的深度可能不同,c#,wpf,xaml,grid,treeviewitem,C#,Wpf,Xaml,Grid,Treeviewitem,我正在尝试创建一个树视图,每行包含大量列数据(例如,在我的示例中为2列,属性和值),类似于。与Heena提出的解决方案不同的是,树可能更复杂一些。每个分支的深度可能不同(因此在某些情况下,节点的子节点可能比其他节点多) 我将使用以下类实现代码,以便嵌套元素成为可能: public class TreeItem { private TreeItem() { } public TreeItem( string property, string value ) { if(

我正在尝试创建一个树视图,每行包含大量列数据(例如,在我的示例中为2列,属性和值),类似于。与Heena提出的解决方案不同的是,树可能更复杂一些。每个分支的深度可能不同(因此在某些情况下,节点的子节点可能比其他节点多)

我将使用以下类实现代码,以便嵌套元素成为可能:

public class TreeItem
{
  private TreeItem()
  {
  }

  public TreeItem( string property, string value )
  {
    if( property == null )
    {
      property = string.Empty;
    }

    if( value == null )
    {
      value = string.Empty;
    }

    _property = property;
    _value = value;
  }

  public TreeItem( params TreeItem[] items )
  {
    AddItems( items );
  }

  public TreeItem( string property, string value, params TreeItem[] items ) : this( property, value )
  {
    AddItems( items );
  }

  public string Property
  {
    get
    {
      return _property;
    }
  }

  public string Value
  {
    get
    {
      return _value;
    }
  }

  public IEnumerable<TreeItem> Items
  {
    get
    {
      return (IEnumerable<TreeItem>)_items;
    }
  }

  private void AddItems( params TreeItem[] items )
  {
    foreach( TreeItem item in items )
    {
      if( item != null )
      {
        _items.Add( item );
      }
    }
  }

  private readonly string _property;

  private readonly string _value;

  private readonly List<TreeItem> _items = new List<TreeItem>();
}
公共类树项
{
私有TreeItem()
{
}
公共树项(字符串属性、字符串值)
{
if(属性==null)
{
property=string.Empty;
}
如果(值==null)
{
value=string.Empty;
}
_财产=财产;
_价值=价值;
}
公共树项(参数树项[]项)
{
补充项目(项目);
}
公共TreeItem(字符串属性、字符串值、参数TreeItem[]项):此(属性、值)
{
补充项目(项目);
}
公共字符串属性
{
得到
{
归还财产;
}
}
公共字符串值
{
得到
{
返回_值;
}
}
公共数字项目
{
得到
{
退货(IEnumerable)\项目;
}
}
私有无效附加项(参数树项[]项)
{
foreach(项目中的TreeItem项目)
{
如果(项!=null)
{
_项目。添加(项目);
}
}
}
私有只读字符串_属性;
私有只读字符串_值;
私有只读列表_items=new List();
}
有可能用WPF实现这一点吗?如果是,如何进行?


与手工创建树相比,修改datatemplate以附着数据并绑定到数据可能更容易。您的数据是如何结构化的?你能举一个数据的例子吗?有一个基于ASN1的通信协议。这些类是使用ASN1编译器自动创建的。从这些类中,我计划将子类实现为ViewModel,以从它们自己的属性中获取TreeItem。当数据来自TCP/IP时,解码器会自动将数据转换为这些ASN1对象,因此最终会自动生成树。谢谢!我可以把它和我的参考文章结合起来!成功了:-)