我想在树视图中可视化对象的层次结构。我知道有很多教程描述了如何做到这一点。原则上我认为我甚至不知道该怎么做,但我被困住了。我希望有人可以指出我的错误。
这是“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文件中,但我无法弄明白。我需要更改以在树视图中使用层次结构吗?
感谢您的帮助! 最好的问候
答案 0 :(得分:1)
尝试在HierarchicalDataTemplate
TreeView.Resources
DataType
中MyObject
定义<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}}
当源是集合视图时,可以使用斜杠(/)指定当前项。例如,子句Path = /设置绑定到视图中的当前项。当源是集合时,此语法指定默认集合视图的当前项。
答案 1 :(得分:0)
您已经设置了ItemsSource,但我认为您还需要在HierachicalDataTemplate中设置一个ItemTemplate。看看here。