Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在WPF中构建树视图_Wpf_Treeview - Fatal编程技术网

在WPF中构建树视图

在WPF中构建树视图,wpf,treeview,Wpf,Treeview,我正在尝试在WPF中构建一个三级树视图。基本上,我有一个顶级项目列表,所有这些项目都有一个子项目。这些子项可能有也可能没有自己的chid项 有人知道网上有教程吗?这个例子可能就是你需要的: 此示例可能正是您所需要的: 最简单的方法是使用绑定和HierarchycalDataTemplate。使用您的数据声明一个类: class Item : INotifyPropertyChanged { public Item() { this.Children = new O

我正在尝试在WPF中构建一个三级树视图。基本上,我有一个顶级项目列表,所有这些项目都有一个子项目。这些子项可能有也可能没有自己的chid项


有人知道网上有教程吗?

这个例子可能就是你需要的:

此示例可能正是您所需要的:
最简单的方法是使用绑定和
HierarchycalDataTemplate
。使用您的数据声明一个类:

class Item : INotifyPropertyChanged
{
    public Item()
    {
        this.Children = new ObservableCollection<Item>();
    }

    public event PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        var handler = PropertyChanged;
        if (handler != null)
            handler(this, new PropertyChangedEventArgs(propertyName));
    }

    private string _name;
    public string Name
    {
        get { return _name; }
        set
        {
            _name = value;
            OnPropertyChanged("Name");
        }
    }

    public ObservableCollection<Item> Children { get; private set; }
}
现在,您只需将
TreeView
ItemsSource
绑定到顶级项目集合,树节点将自动构建。如果需要添加(或删除)节点,只需将项目添加到父集合(或从父集合中删除)


在本例中,我使用了单个项目类型,但如果在
TreeView
中显示多个类型,则需要为每个类型定义一个
hierarchycaldatatemplate
。对于叶节点(没有子节点的节点),只需使用常规的
数据模板

最简单的方法是使用绑定和
层次数据模板
。使用您的数据声明一个类:

class Item : INotifyPropertyChanged
{
    public Item()
    {
        this.Children = new ObservableCollection<Item>();
    }

    public event PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        var handler = PropertyChanged;
        if (handler != null)
            handler(this, new PropertyChangedEventArgs(propertyName));
    }

    private string _name;
    public string Name
    {
        get { return _name; }
        set
        {
            _name = value;
            OnPropertyChanged("Name");
        }
    }

    public ObservableCollection<Item> Children { get; private set; }
}
现在,您只需将
TreeView
ItemsSource
绑定到顶级项目集合,树节点将自动构建。如果需要添加(或删除)节点,只需将项目添加到父集合(或从父集合中删除)


在本例中,我使用了单个项目类型,但如果在
TreeView
中显示多个类型,则需要为每个类型定义一个
hierarchycaldatatemplate
。对于叶节点(没有子节点的节点),您可以只使用常规的
数据模板

解决您的问题可能有点晚,但是遇到相同问题的人。 我发现WPF有一个非常好的免费控件:
有了好的文档..

解决您的问题可能有点晚了,但是有人遇到了同样的问题。 我发现WPF有一个非常好的免费控件:
有了一个好的文档..

如果您忽略了我没有声明数据类型并且该头似乎不存在的事实,那么我就能够使它与具有多个类型的不同对象一起工作。显示的日期具有相同的属性名称,因此可以正常工作。这可能不是最好的方式,但由于显示必须简单,我现在将这样做。确实,我的代码中有一个错误,Header属性不存在。。。现在已经修复了,如果您忽略了我没有声明数据类型,并且该头似乎不存在的事实,那么我可以使它与具有多个类型的不同对象一起工作。显示的日期具有相同的属性名称,因此可以正常工作。这可能不是最好的方式,但由于显示必须简单,我现在将这样做。确实,我的代码中有一个错误,Header属性不存在。。。现在已经修好了我知道这已经4年了但值得一提的是。。。阿门。网络上的WPF教程非常复杂。我走得越远,看到的越多,我不认为写教程的人中有一半真的知道他们在做什么。WPF中的事情不必那么复杂…我知道这已经4年了,但值得一提的是。。。阿门。网络上的WPF教程非常复杂。我走得越远,看到的越多,我不认为写教程的人中有一半真的知道他们在做什么。WPF中的事情不必那么复杂。。。