我是WPF的新手,我不得不创建一个绑定到列表列表等列表的Treeview,子节点的数量可以根据需要增加。我已经创建了两个HierarchicalDataTemplates来测试代码,但子节点没有出现
我的树视图定义为
<telerik:RadTabItem Header="Lookup Sets">
<telerik:RadTreeView IsLoadOnDemandEnabled="True" ItemsSource="{Binding AttributeLookupSetConversions}">
<telerik:RadTreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type cm:AttributeLookupSetConversion}">
<CheckBox Content="{Binding Path=Name}" IsChecked="{Binding Path=IsSelected, Mode=TwoWay}" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked" Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type telerikDocking:RadSplitContainer}}, Path=DataContext.UpdateSelectionCommand}"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type cm:AttributeConversion}">
<CheckBox Content="{Binding Path=Name}" IsChecked="{Binding Path=IsSelected, Mode=TwoWay}" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked" Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type telerikDocking:RadSplitContainer}}, Path=DataContext.UpdateSelectionCommand}"/>
</HierarchicalDataTemplate>
</telerik:RadTreeView.Resources>
</telerik:RadTreeView>
</telerik:RadTabItem>
我是否缺少某些东西或是否需要在代码中创建节点?我有一个tabControl,其中包含列表列表的treeViews,问题是一个选项卡可以包含由Id关联的另一个treeView的项目,所以如果我说的是示例
stundents -Student1 -Course 1 -Course 2 - Department 1 -Student 2 -Course 6 Department12 Course -Qualification 1 -WorkType
答案 0 :(得分:2)
创建一个类作为所有ltem的根,其中DisplayName
和其他Item
的observablecollection:
public class Item : INotifyPropertyChanged
{
string _displayText;
public string DisplayText { get { return _displayText; } set { _displayText = value; RaisePropertyChanged("DisplayText"); } }
ObservableCollection<Item> _items;
public ObservableCollection<Model> Items { get { return _items; } set { _items = value; RaisePropertyChanged("Items"); } }
public event PropertyChangedEventHandler PropertyChanged;
internal void RaisePropertyChanged(string propname)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propname));
}
}
任何其他类型(学生,教师,课程,部门等)必须来自此课程。他们也可能有自己的特定属性。
public class Student : Item
{
}
public class Course : Item
{
}
public class Qualification : Item
{
}
请注意,如果您有两种类型的Course
类(具有不同的内部项目列表),请为它们创建两个单独的类。
现在,您应该在视图模型中填充observableCollection,并且所有内容都将在TreeView中处理,如下所示:
<TreeView DataContext="{Binding}" ItemsSource="{Binding Items}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Items}">
<TextBlock Text="{Binding DisplayText}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>