WPF 学生成绩管理工具开发笔记(7)-- HierarchicalDataTemplate数据分层绑定

这篇博客介绍了在WPF中使用HierarchicalDataTemplate进行数据分层绑定的方法,用于开发学生成绩管理工具。内容包括HierarchicalDataTemplate的基本概念、数据集合的组织结构(年级、班级、学生)以及对应的Xaml前端实现,最终展示出了实现的效果。

HierarchicalDataTemplate简介

HierarchicalDataTemplate,分层数据模板,用来定义分层数据样式的模板,一般多用于MenuItem和TreeViewItem,其主要包含以下几个重要属性:
DataType :指定模板用于哪种数据类型
ItemsSource:指定该类数据的子集,即下一层显示那些数据
内容 指定数据如何显示 绑定哪个属性

数据集合

  • 年级集合
//年级集合:ObservableCollection<StudentGrade> StuGradeList;
  • 年级类
public class StudentGrade : NotifycationBase//年级类
{
    private string  _GradeName;
    public string  GradeName
    {
        get { return this._GradeName; }
        set
        {
            this._GradeName = value;
            RaisePropertyChanged(() => GradeName);
        }
    }

    private ObservableCollection<StudentClass> _StuClassList;
    public ObservableCollection<StudentClass> StudentClassList //类中包含的班级集合
        {
            get { return this._StuClassList; }
            set
            {
                this._StuClassList = value;
                RaisePropertyChanged(() => StudentClassList);
            }
        }

  • 班级类
public class StudentClass : NotifycationBase
{
    private string _StuClassName;
    public string StuClassName
        {
            get { return this._StuClassName; }
            set
            {
                this._StuClassName = value;
                RaisePropertyChanged(() => StuClassName);
            }
        }


    private ObservableCollection<StudentSCore> _StudentScoreList;
    public ObservableCollection<StudentSCore> StudentScoreList
    {
        get { return this._StudentScoreList; }
        set
        {
            this._StudentScoreList = value;
            RaisePropertyChanged(() => StudentScoreList);
        }
    }

    public StudentClass(string stuClassName,ObservableCollection<StudentSCore> ChildScores)
    {
        this.StuClassName = stuClassName;
        this.StudentScoreList = ChildScores;
    }
}

  • 学生类
public class StudentSCore
{
     [StudentClassManage("姓名")]
    public string StuName { get; set; }
}

Xaml前端

  • HierarchicalDataTemplate定义(因模板是层层引用的,并且xaml是从上至下顺序读取,所以这里应注意模板定义顺序,从上至下,依次为学生->班级->年级)
    <UserControl.Resources>
        <!--学生模板-->
        <HierarchicalDataTemplate x:Key="StudentDataTemplate">
            <StackPanel Orientation="Horizontal">
                <Image Source="/StudentMS;component/Resources/ICON.ICO"   Width="10"/>
                <TextBlock Text="{Binding StuName}" FontSize="14"  Margin="5 1 1 0"/>
            </StackPanel>
        </HierarchicalDataTemplate>

        <!--班级模板-->
        <HierarchicalDataTemplate x:Key="StuClassDataTemplate"
              ItemsSource="{Binding StudentScoreList}" 
             ItemTemplate="{StaticResource StudentDataTemplate}">
            <StackPanel Orientation="Horizontal">
                <Image Source="/StudentMS;component/Resources/student.ico"  Width="15"/>
                <TextBlock Text="{Binding StuClassName}"  FontSize="16" Margin="5 1 1 0"/>
            </StackPanel>
        </HierarchicalDataTemplate>

        <!--年级模板-->
        <HierarchicalDataTemplate x:Key="StuGradeDataTemplate" DataType="StudentClass"
             ItemsSource="{Binding StudentClassList}" 
             ItemTemplate="{StaticResource StuClassDataTemplate}">
            <StackPanel Orientation="Horizontal">
                <Image Source="/StudentMS;component/Resources/treeitem.png"    Width="15"/>
                <TextBlock Text="{Binding GradeName}"   FontSize="18" Margin="5 1 1 0"/>
            </StackPanel>
        </HierarchicalDataTemplate>

    </UserControl.Resources>

  • TreeView的 ItemsSource和ItemTemplate设定
<TreeView  x:Name="gradeTree" 
                    ItemsSource="{Binding StuGradeList}" 
                   ItemTemplate="{StaticResource StuGradeDataTemplate}"  />

效果

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值