Hierarchical-DataBinding 在 TreeView 中
Hierarchical-DataBinding in TreeView
我有一个名为 ClassWithPupils
的 class,看起来像:
public class ClassWithPupils : ViewModelBase
{
public ClassWithPupils(IClass @class)
{
Class = @class;
Pupils = new ObservableCollection<IPupil>();
}
public IClass Class
{
get { return Get<IClass>(); }
set { Set(value); }
}
public ObservableCollection<IPupil> Pupils
{
get { return Get<ObservableCollection<IPupil>>(); }
set { Set(value); }
}
}
我有一个包含 ObservableCollection<ClassWithPupils>
的 ViewModel。
private ObservableCollection<ClassWithPupils> classesWithPupils;
public ObservableCollection<ClassWithPupils> ClassesWithPupils
{
get { return classesWithPupils ?? (classesWithPupils = new ObservableCollection<ClassWithPupils>()); }
}
此集合中正确填充了数据库中的项目。
现在我想在 TreeView
中显示 ClassesWithPupils 中的所有项目。
目前我的视图如下所示:
<TreeView ItemsSource="{Binding ClassesWithPupils, UpdateSourceTrigger=PropertyChanged}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding}">
<Label Content="{Binding Class.Name}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
所以 Class-Names 显示正确。
不幸的是,我不知道如何将每个 ClassWithPupils-Entry 的 Pupils-Collection 绑定到 TreeView 中的正确项目,如 children。
我试过类似的东西:
<TreeView ItemsSource="{Binding ClassesWithPupils, UpdateSourceTrigger=PropertyChanged}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding}">
<Label Content="{Binding Class.Name}"/>
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Pupils}">
<Label Content="{Binding Name}"/>
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
没有成功...
所以我的问题是:如何在 TreeView 中将学生的姓名显示为 class 中的 children?
查看您的代码后,我发现绑定中只有一个错误,这可能会导致所描述的问题,您应该像这样在分层模板中绑定到 Pupils:
<TreeView ItemsSource="{Binding ClassesWithPupils, UpdateSourceTrigger=PropertyChanged}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Pupils}">
<Label Content="{Binding Class.Name}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
我有一个名为 ClassWithPupils
的 class,看起来像:
public class ClassWithPupils : ViewModelBase
{
public ClassWithPupils(IClass @class)
{
Class = @class;
Pupils = new ObservableCollection<IPupil>();
}
public IClass Class
{
get { return Get<IClass>(); }
set { Set(value); }
}
public ObservableCollection<IPupil> Pupils
{
get { return Get<ObservableCollection<IPupil>>(); }
set { Set(value); }
}
}
我有一个包含 ObservableCollection<ClassWithPupils>
的 ViewModel。
private ObservableCollection<ClassWithPupils> classesWithPupils;
public ObservableCollection<ClassWithPupils> ClassesWithPupils
{
get { return classesWithPupils ?? (classesWithPupils = new ObservableCollection<ClassWithPupils>()); }
}
此集合中正确填充了数据库中的项目。
现在我想在 TreeView
中显示 ClassesWithPupils 中的所有项目。
目前我的视图如下所示:
<TreeView ItemsSource="{Binding ClassesWithPupils, UpdateSourceTrigger=PropertyChanged}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding}">
<Label Content="{Binding Class.Name}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
所以 Class-Names 显示正确。
不幸的是,我不知道如何将每个 ClassWithPupils-Entry 的 Pupils-Collection 绑定到 TreeView 中的正确项目,如 children。
我试过类似的东西:
<TreeView ItemsSource="{Binding ClassesWithPupils, UpdateSourceTrigger=PropertyChanged}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding}">
<Label Content="{Binding Class.Name}"/>
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Pupils}">
<Label Content="{Binding Name}"/>
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
没有成功...
所以我的问题是:如何在 TreeView 中将学生的姓名显示为 class 中的 children?
查看您的代码后,我发现绑定中只有一个错误,这可能会导致所描述的问题,您应该像这样在分层模板中绑定到 Pupils:
<TreeView ItemsSource="{Binding ClassesWithPupils, UpdateSourceTrigger=PropertyChanged}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Pupils}">
<Label Content="{Binding Class.Name}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>