C# 具有多个列的Treeview

C# 具有多个列的Treeview,c#,wpf,treeview,datatemplate,C#,Wpf,Treeview,Datatemplate,我正在尝试在WPF中创建一个包含多个列的树视图。我很清楚,关于这个问题,确实有很多问题。然而,在绑定数据时,它们似乎采取了不同的方法。每个人似乎都将itemssource设置为我在de-code-behind中填充treeview.items的位置。这也是我不确定是使用ItemTemplate/HierarchycalDataTemplate还是正确实现它的原因。(我觉得这应该是一个简单的步骤。) 我现时的守则如下: Mainwindow.xaml中的Treeview <TreeView

我正在尝试在WPF中创建一个包含多个列的树视图。我很清楚,关于这个问题,确实有很多问题。然而,在绑定数据时,它们似乎采取了不同的方法。每个人似乎都将itemssource设置为我在de-code-behind中填充treeview.items的位置。这也是我不确定是使用ItemTemplate/HierarchycalDataTemplate还是正确实现它的原因。(我觉得这应该是一个简单的步骤。)

我现时的守则如下:

Mainwindow.xaml中的Treeview

<TreeView x:Name="ProcesTree" Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
    <TreeView.ItemTemplate>
        <ItemContainerTemplate>
            <Grid>
                <TextBlock Text="{Binding procesNummer}" HorizontalAlignment="Left" VerticalAlignment="Center" Grid.Column="0"/>
                <TextBlock Text="{Binding procesNaam}" HorizontalAlignment="Left" VerticalAlignment="Center" Grid.Column="0"/>
            </Grid>
        </ItemContainerTemplate>
    </TreeView.ItemTemplate>
</TreeView>
@编辑-为了清楚起见,我现在有一个类似下图的结构。唯一遗漏的是模板?如图所示:

看看这个第三方控件(基本上它使用ListView模拟TreeView的功能,应该比TreeView控件快),它应该满足您的要求:

或者,可以根据您的需要修改Microsoft提供的以下代码(说明如何编辑TreeViewItem以支持列)


必须注意的是,这两个项目都不支持数据虚拟化

我偶然发现了一个简单的方法来完成我的尝试。不使用第三方控件或非常复杂的模板。感谢以下链接:

因为我很难找到任何有用的答案,所以我决定自己发布一个答案,这样其他人也可以利用它

带模板的Treeview代码:


//列数
//要在treeview网格中使用的控件
要绑定到treeview的列表(每次给进程一个子进程列表时,它都会在treeview中生成一个附加级别):

列出进程;
过程类:

public class Proces : TreeViewItem {
    public Int64 procesId { get; set; }
    public String procesNummer { get; set; }
    public String procesNaam { get; set; }
    public String procesOmschrijvig { get; set; }
    public Boolean procesEinde { get; set; }
}
public class Proces {
    public Int64 procesId { get; set; }
    public String procesName { get; set; }
    public List<Proces> subProcesses { get; set; }
}
公共类进程{
公共Int64进程ID{get;set;}
公共字符串procesName{get;set;}
公共列表子进程{get;set;}
}

如果您需要列标题/调整大小/重新排列/排序,则您的问题更像。如果您需要列标题/调整大小/重新排列/排序,则您的问题更像。您的项目模板中是否也缺少扩展控件?我不需要标题、调整大小、排序等。我只需要多个列,对于proces类的每个属性,一列。@Sliver2009我已经看到了这两个项目,但我想用某种模板中的网格来完成它。我不想让它过于复杂,……不幸的是,在microsoft页面中用于下载项目的microsoft链接已断开。
<TreeView BorderThickness="0" ItemsSource="{Binding processes}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding subProcesses}" >
            <Grid>

                //Number of columns
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="2*"/>
                </Grid.ColumnDefinitions>

                //Controls to use in the treeview grid
                <TextBlock Text="{Binding procesId}" Grid.Column="0"/>
                <TextBlock Text="{Binding procesName}" Grid.Column="1"/>

            </Grid>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>
List<Proces> processes;
public class Proces {
    public Int64 procesId { get; set; }
    public String procesName { get; set; }
    public List<Proces> subProcesses { get; set; }
}