树视图中的层次结构(C#)

时间:2014-02-22 11:04:59

标签: c# wpf xaml treeview

我想在树视图中可视化对象的层次结构。我知道有很多教程描述了如何做到这一点。原则上我认为我甚至不知道该怎么做,但我被困住了。我希望有人可以指出我的错误。

这是“myObject”:

    private int _id;
    public virtual int Id
    {
        get
        {
            return this._id;
        }
        set
        {
            if(this._id != value)
            {
                this.OnPropertyChanging("Id");
                this._id = value;
                this.OnPropertyChanged("Id");
            }
        }
    }

    private string _name;
    public virtual string name
    {
        get
        {
            return this._name;
        }
        set
        {
            if(this._name != value)
            {
                this.OnPropertyChanging("name");
                this._name = value;
                this.OnPropertyChanged("name");
            }
        }
    }

    private int? _parentId;
    public virtual int? parentId
    {
        get
        {
            return this._parentId;
        }
        set
        {
            if(this._parentId != value)
            {
                this.OnPropertyChanging("parentId");
                this._parentId = value;
                this.OnPropertyChanged("parentId");
            }
        }
    }

    private MyObject _myObject1;
    public virtual MyObject MyParentObject
    {
        get
        {
            return this._myObject1;
        }
        set
        {
            if(this._myObject1 != value)
            {
                this.OnPropertyChanging("MyParentObject");
                this._myObject1 = value;
                this.OnPropertyChanged("MyParentObject");
            }
        }
    }

    private IList<MyObject> _myObjects = new List<MyObject>();
    public virtual IList<MyObject> MyChildObjects
    {
        get
        {
            return this._myObjects;
        }
    }

这里重要的是名为“MyChildObjects”的子对象列表。

XAML如下所示:

    <TreeView ItemsSource="{Binding myObjects}">
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding myObjects/MyChildObjects}">
                <TextBlock Text="{Binding name}" />
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>

我现在的问题是树视图只显示所有对象的平面结构。最有可能的错误是在XAML文件中,但我无法弄明白。我需要更改以在树视图中使用层次结构吗?

感谢您的帮助! 最好的问候

2 个答案:

答案 0 :(得分:1)

尝试在HierarchicalDataTemplate TreeView.Resources DataTypeMyObject定义<TreeView ItemsSource="{Binding myObjects}"> <TreeView.Resources> <HierarchicalDataTemplate DataType="{x:Type local:MyObject}" ItemsSource="{Binding MyChildObjects}"> <TextBlock Text="{Binding name}" /> </HierarchicalDataTemplate> </TreeView.Resources> </TreeView>

ItemsSource

您的myObjects/路径也是错误的。当您使用myObjects时,它表示ItemsSource="{Binding MyChildObjects}的当前项。你需要的只是{{1}}

Binding.Path

  

当源是集合视图时,可以使用斜杠(/)指定当前项。例如,子句Path = /设置绑定到视图中的当前项。当源是集合时,此语法指定默认集合视图的当前项。

答案 1 :(得分:0)

您已经设置了ItemsSource,但我认为您还需要在HierachicalDataTemplate中设置一个ItemTemplate。看看here