掌桥专利:专业的专利平台
掌桥专利
首页

一种基于树结构的数据加载方法和相关设备

文献发布时间:2023-06-19 11:54:11


一种基于树结构的数据加载方法和相关设备

技术领域

本发明涉及数据处理领域,特别涉及一种基于树结构的数据加载方法和相关设备。

背景技术

树视图(TreeView)用于显示按照树形结构进行组织的数据。Treeview控件中一个树形图由节点(TreeNode)和连接线组成,节点是TreeView的基本组成单元,节点包括文本和数据,其中,文本是该节点的名称,而数据为无定型指针,可以指向与节点相联系的数据结构。同时,相对于每一个节点,该节点的子节点为该节点的属性。

Windows呈现基础(Windows Presentation Foundation,WPF)是一个可创建桌面客户端应用程序的UI框架,在WPF中存在用于展示树目录结构的控件TreeView,该控件用于一次性加载多个节点。但该控件一次性加载上百万个节点的情况下,若快速拖动TreeView滚动条或展开节点树,会导致该控件反应不及时,从而导致WPF应用程序的卡顿,甚至卡死,影响桌面界面使用的流畅性和用户体验。

发明内容

本发明要解决的技术问题在于基于树结构的数据加载方法,针对现有技术的不足,提供一种基于树结构的数据加载方法。

为了解决上述技术问题,本发明所采用的技术方案如下:

一种基于树结构的数据加载方法,所述方法包括:

获取待展示数据;

将所述待展示数据与预设的初始树结构类进行绑定,得到目标树结构;

当监听到针对所述目标树结构的节点事件时,对所述节点事件进行解析,得到事件对象;

当基于所述目标树结构对应的事件响应信息确定所述节点事件为节点展开事件时,根据所述目标树结构,加载并显示所述事件对象对应的一级子节点。

所述基于树结构的数据加载方法,其中,所述将所述待展示数据与预设的目标树结构类进行绑定,得到目标树结构,具体包括:

将所述待展示数据的数据节点信息与所述树结构类的树节点信息进行信息绑定,得到初始树结构;

根据所述数据节点信息对应的节点关系,调整所述初始树结构的节点关系,得到目标树结构。

所述基于树结构的数据加载方法,其中,所述信息绑定的绑定模式为MVVM模式。

所述基于树结构的数据加载方法,其中,所述方法还包括:

当检测到针对所述待展示数据的数据变更指令时,根据所述数据变更指令,调整所述目标树结构的树节点信息。

所述基于树结构的数据加载方法,其中,所述对当监听到针对所述目标树结构的节点事件时,对所述节点事件进行解析,得到事件对象之前,还包括:

将预设的自定义展开行为替换所述目标树结构对应的默认展开行为,以及,

将预设的自定义双击行为替换所述目标树结构对应的默认双击行为,得到所述目标树结构对应的事件响应信息。

所述基于树结构的数据加载方法,其中,所述一级子节点包括可视化节点;所述根据所述目标树结构,加载并显示所述事件对象对应的一级子节点,具体包括:

根据所述目标树结构,确定所述事件对象对应一级子节点;

根据当前显示窗口的显示参数,确定所述一级子节点中与所述显示窗口对应的可视化节点;

加载并显示所述可视化节点。

所述基于树结构的数据加载方法,其中,所述根据所述目标树结构,加载并显示所述事件对象对应的一级子节点,具体包括:

根据所述目标树结构,加载所述一级子节点;

根据所述目标树结构,判断所述一级子节点是否包含有子节点;

若包含,则显示所述一级子节点并显示预设的展开提示符;

若不包含,则显示所述一级子节点。一种基于树结构的数据加载方法装置,其中,所述基于树结构的数据加载方法装置具体包括:

获取模块,用于获取待展示数据;

绑定模块,用于将所述待展示数据与预设的初始树结构类进行绑定,得到目标树结构;

解析模块,用于当监听到针对所述目标树结构的节点事件时,对所述节点事件进行解析,得到事件对象;

加载显示模块,用于当基于所述目标树结构对应的事件响应信息确定所述节点事件为节点展开事件时,根据所述目标树结构,加载并显示所述事件对象对应的一级子节点。

一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如上任一所述的基于树结构的数据加载方法中的步骤。

一种终端设备,其包括:处理器、存储器及通信总线;所述存储器上存储有可被所述处理器执行的计算机可读程序;

所述通信总线实现处理器和存储器之间的连接通信;

所述处理器执行所述计算机可读程序时实现如上任一所述的基于树结构的数据加载方法中的步骤。

有益效果:与现有技术相比,本发明提供了一种基于树结构的数据加载方法和相关设备。先获取需要展示的数据,即待展示数据。然后将待展示数据与WPF平台预设的空白树进行绑定,生成树结构。并在生成树结构之后,修改树结构对应的事件响应信息。对显示窗口进行监听,并监听到针对某一个节点进行节点展示时,基于修改后的事件响应信息,只加载并显示与该节点直接相连的子节点,即一级子节点。而不再加载展示这些一级子节点的后续节点,从而极大地减少了所需要加载的子节点的数量,提高了响应效率。

附图说明

图1为本发明提供的基于树结构的数据加载方法的第一个流程图。

图2为本发明提供的基于树结构的数据加载方法的第二个流程图。

图3为本发明提供的基于树结构的数据加载装置的结构示意图。

图4为本发明提供的终端设备的结构原理图。

具体实施方式

本发明提供一种基于树结构的数据加载方法和相关设备,为使本发明的目的、技术方案及效果更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。

本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。

发明人经过研究发现,在WPF平台控件,TreeView会一次性加载多个节点。当该控件一次性加载上百万个节点的情况下,若快速拖动TreeView滚动条或展开节点树,会导致该控件反应不及时,从而导致WPF应用程序的卡顿,甚至卡死,影响桌面界面使用的流畅性和用户体验。

为了解决上述问题,在本发明实施例中,获取待展示数据;将所述待展示数据与预设的初始树结构类进行绑定,得到目标树结构;当监听到针对所述目标树结构的节点事件时,对所述节点事件进行解析,得到事件对象;当基于所述目标树结构对应的事件响应信息确定所述节点事件为节点展开事件时,根据所述目标树结构,加载并显示所述事件对象对应的一级子节点。

举例说明,本发明实施例可以应用到进行磁盘目录的展示,以便用户需要查阅某一个磁盘的目录时,以树状图的形式进行展示。

可以理解的是,除磁盘目录外,通讯录、思维导图数据等可以以树状图显示的数据,都可以作为本发明所获取的待展示数据。

需要注意的是,上述应用场景仅是为了便于理解本发明而示出,本发明的实施方式在此方面不受任何限制。相反,本发明的实施方式可以应用于适用的任何场景。

下面结合附图,通过对实施例的描述,对发明内容作进一步说明。

如图1所示,本实施提供了一种基于树结构的数据加载方法,所述方法可以包括以下步骤:

S10、获取待展示数据。

具体地,本实施例中待展示数据为磁盘目录,先对磁盘进行扫描,获取该磁盘中的磁盘目录。

S20、将所述待展示数据与预设的初始树结构类进行绑定,得到目标树结构。

具体地,预先安装Microsoft Visual Studio开发工具,如Microsoft VisualStudio 2017/2019,然后通过这些开发工具创建一个不含有任何展示数据的初始树结构类。

然后将待展示数据,也就是磁盘目录,与初始树结构类进行数据绑定,生成目标树结构类。其具体过程为:

A10、将所述待展示数据的数据节点信息与所述树结构类的树节点信息进行信息绑定,得到目标树结构。

具体地,以磁盘C为例,先判断磁盘C是否包含有子文件夹,以及子文件夹的名称、属性等信息。将磁盘C与每一个子文件夹作为节点,这些信息作为数据节点信息,与预设的树结构类中的节点信息进行信息绑定。例如磁盘C包含有两个子文件夹,命名为“文件夹一”和“文件夹二”,先将预设的树结构类中的根节点与磁盘C对应,例如将其根节点修改为“磁盘C”,同时,将“文件夹一”和“文件夹二”与该树结构类的子节点对应,将子节点修改为“文件夹一”和“文件夹二”。

进一步地,本实施例为应对待展示数据的变化,采用MVVM(Model-View-ViewModel)模式作为绑定模式。

MVVM模式提供了一种将View的状态和行为抽象化,让显示的视图与业务逻辑进行分离,实现了即可以将绑定源,即待展示数据,的修改反应到界面上,又能将界面上的修改反馈至绑定源。本实施例中,为一个视图,即目标树结构,创建了一个与之对应的视图模型,即ViewModel。在本实施例中,将目标树结构存储ViewModel中,当检测到针对所述待展示数据的数据变更指令时,根据所述数据变更指令,调整所述目标树结构的树节点信息。因此,数据变更指令可来源于后台待展示数据的修改,也可来源于用户基于界面下发的指令。

A20、根据所述数据节点信息对应的节点关系,调整所述初始树结构的节点关系,得到目标树结构。

具体地,再根据所获得的数据节点信息对应的节点关系,将初始树结构的各个节点之间的连接关系,也就是节点关系,与数据节点信息的节点关系进行对应,从而得到目标树结构。

在磁盘C中,“文件夹一”和“文件夹二”是并列关系,因此其对应的节点关系为兄弟关系,两者对应的节点为兄弟节点。“文件夹一”和磁盘C对应的节点关系为父子关系,两者对应的节点为子节点和根节点。因此,将初始树节点中的节点“文件夹一”与“文件夹二”与磁盘C对应的节点建立上下级连接关系。将所有的初始树结构中的节点关系都与数据节点信息对应的几点关系对应,则得到目标树结构。

S40、当监听到针对所述目标树结构的节点事件时,对所述节点事件进行解析,得到事件对象。

具体地,终端会对页面进行事件监听,如果监听到的事件为针对目标树结构的节点事件时,需要执行节点事件对应的操作。所述节点事件是指将某一个节点的子节点进行处理的指令事件,例如左键双击、右键双击。首先对节点事件进行解析,得到该节点事件对应的事件对象,即该用户希望对哪一个节点进行处理。

S40、当基于所述目标树结构对应的事件响应信息确定所述节点事件为节点展开事件时,根据所述目标树结构,加载并显示所述事件对象对应的一级子节点。

具体地,以上述磁盘C为事件对象为例,得到事件对象后,即分析该节点事件是需要对节点进行何种处理,常规的处理包括重命名、删除、复制等等。判断方式即通过事件响应信息以判断,事件响应信息指针对该事件,应当后续进行何种操作,事件响应信息中包括与各个节点事件对应的操作行为信息。

在本实施例中,所述节点事件包括节点展开事件,节点展开事件包括自定义节点展开事件和默认节点展开事件。例如双击界面上该节点所在位置、单击该节点对应的展示图标。

自定义节点展开事件是指预先创建自定义展开行为,并替换在原有的基于目标树结构对节点展开事件对应的响应行为。

因此,如图2所示,在监听到节点展开事件之前,本实施例中还对TreeView控件的事件响应模板进行修改。首先创建自定义展开事件,以替换TreeView原有的展开事件。在自定义节点展开事件对应的操作中,TreeView中默认的节点展开行为是将所有的事件对象的子节点进行加载和展示,将默认的节点展开行为被替换掉,替换为本实施例中的自定义展开行为,本实施例的自定义展开行为是只展开事件对象的一级子节点。一级子节点为该事件对象在目标树结构中直接连接的子节点,例如前文的“文件夹一”和“文件夹二”。

在WPF平台的TreeView中,默认节点展开事件为用户对节点进行双击,默认的节点展开操作为加载该事件对象所有的子节点。而在原有的节点展开操作后,TreeView本身自带的双击事件不起作用了,需要自定义双击事件,并重写后面的业务逻辑。本实施例中,将预设的自定义双击行为替换所述目标树结构对应的默认双击行为,以使得后续还能够对双击事件进行节点展开。其中,本实施例自定义双击行为以附加行为方式设定。

因此,基于所述目标树结构对应的事件响应信息确定所述节点事件为节点展开事件时,根据所述目标树结构,加载并显示所述事件对象对应的一级子节点,而不再是加载该事件对象所有的子节点,减少了每次加载子节点的数量,提高了加载效率。

进一步地,由于界面上的显示窗口大小有限,当加载了大量的子节点时,只有与显示窗口大小对应的子节点能够被显示出来,其他的子节点需要用户先执行下拉、调整显示窗口的大小等方式才能够被显示,因此,在本实施例的第一种实现方式中,加载并显示该事件对象的一级子节点的过程为:

根据所述目标树结构,确定所述事件对象对应加载子节点;

根据当前显示窗口的显示参数,确定所述加载子节点中与所述显示窗口对应的可视化节点;

加载并显示所述可视化节点。

具体地,先基于所述目标树结构,确定事件对象对应的所有直接连接的一级子节点为加载子节点。

同时获取当前显示窗口的显示参数,包括窗口大小、窗口内字体的大小以及事件对象在当前显示窗口的位置坐标等参数。然后基于这些显示参数,判断加载子节点中的可视化节点。例如,根据显示参数,可确定能够加载的一级子节点的数量为5,则根据预设的节点显示顺序,确定加载子节点中的可视化节点。

最后仅加载并显示加载子节点中的可视化节点,从而减少加载的子节点的数量。

此外,当显示的一级子节点还存在子节点时,例如“文件夹一”中还包括“文件夹三”、“文件夹四”,则需要对显示的一级子节点进行节点展开功能的限制。因此,在本实施的第二种实现方式中,展示过程为:

根据所述目标树结构,加载所述一级子节点;

根据所述目标树结构,判断所述一级子节点是否包含有子节点;

若包含,则显示所述一级子节点并显示预设的展开提示符;

若不包含,则显示所述一级子节点。

具体地,先根据目标树结构,确定所有的子节点中的一级子节点并进行加载。然后根据目标树结构,判断所加载的一级子节点是否有其对应的子节点。例如“文件夹二”中不包含有子文件夹,这在目标树结构上,“文件夹二”不存在对应的子节点。而“文件夹一”包含有两个子文件夹,则其有两个对应的子节点。

若包含子文件夹,即一级子节点包含有子节点,则显示一级子节点,并显示预设的展开提示符,展开提示符用于向用户提示,该一级子节点还包含有子节点,可继续展开。

而若不包含子文件夹,即一级子节点不包含有子节点,这仅显示一级子节点。同时在后端,对节点展开事件不再进行相应。

进一步地,在本发明的第三个实施例中,在展示过程中,将上述第一个实施方式和第二个实施方式进行结合,其过程为:

根据所述目标树结构,确定所述事件对象对应加载子节点;

根据当前显示窗口的显示参数,确定所述加载子节点中与所述显示窗口对应的可视化节点;

加载所述可视化节点;

根据所述目标树结构,判断所述可视化节点是否包含有子节点;

若包含,则显示所述可视化节点并显示预设的展开提示符;

若不包含,则显示所述可视化节点。

其具体过程与上述第一种实现方式和第二种实现方式类型,故在此不再赘述。

基于上述基于树结构的数据加载方法,本实施例提供了一种基于树结构的数据加载方法装置,其中,如图3所示,所述基于树结构的数据加载方法装置包括:

获取模块,用于获取待展示数据;

绑定模块,用于将所述待展示数据与预设的初始树结构类进行绑定,得到目标树结构;

解析模块,用于当监听到针对所述目标树结构的节点事件时,对所述节点事件进行解析,得到事件对象;

加载显示模块,用于当基于所述目标树结构对应的事件响应信息确定所述节点事件为节点展开事件时,根据所述目标树结构,加载并显示所述事件对象对应的一级子节点。

其中,所述绑定模块具体用于:

将所述待展示数据的数据节点信息与所述树结构类的树节点信息进行信息绑定,得到初始树结构;

根据所述数据节点信息对应的节点关系,调整所述初始树结构的节点关系,得到目标树结构。

其中,所述信息绑定的绑定模式为MVVM模式。

其中,所述基于树结构的数据加载装置还包括更新模块,所述更新模块具体用于:

当检测到针对所述待展示数据的数据变更指令时,根据所述数据变更指令,调整所述目标树结构的树节点信息。

其中,所述基于树结构的数据加载装置还包括修改模块,所述修改模块具体用于:

将预设的自定义展开行为替换所述目标树结构对应的默认展开行为,以及,

将预设的自定义双击行为替换所述目标树结构对应的默认双击行为,得到所述目标树结构对应的事件响应信息。

其中,所述加载展示模块具体用于:

根据所述目标树结构,确定所述事件对象对应一级子节点;

根据当前显示窗口的显示参数,确定所述一级子节点中与所述显示窗口对应的可视化节点;

加载并显示所述可视化节点。

其中,所述加载展示模块还用于:

根据所述目标树结构,加载所述一级子节点;

根据所述目标树结构,判断所述一级子节点是否包含有子节点;

若包含,则显示所述一级子节点并显示预设的展开提示符;

若不包含,则显示所述一级子节点。

基于上述基于树结构的数据加载方法,本实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如上述实施例所述的基于树结构的数据加载方法中的步骤。

基于上述基于树结构的数据加载方法,本发明还提供了一种终端设备,如图4所示,其包括至少一个处理器(processor)20;显示屏21;以及存储器(memory)22,还可以包括通信接口(Communications Interface)23和总线24。其中,处理器20、显示屏21、存储器22和通信接口23可以通过总线24完成相互间的通信。显示屏21设置为显示目标设置模式中预设的用户引导界面。通信接口23可以传输信息。处理器20可以调用存储器22中的逻辑指令,以执行上述实施例中的方法。

此外,上述的存储器22中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取计算机可读存储介质中。

存储器22作为一种计算机可读存储介质,可设置为存储软件程序、计算机可执行程序,如本公开实施例中的方法对应的程序指令或模块。处理器20通过运行存储在存储器22中的软件程序、指令或模块,从而执行功能应用以及数据处理,即实现上述实施例中的方法。

存储器22可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端设备的使用所创建的数据等。此外,存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器。例如,U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等多种可以存储程序代码的介质,也可以是暂态计算机可读存储介质。

此外,上述计算机可读存储介质以及终端设备中的多条指令处理器加载并执行的具体过程在上述方法中已经详细说明,在这里就不再一一陈述。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

相关技术
  • 一种基于树结构的数据加载方法和相关设备
  • 一种基于Hue实现数据加载的方法,系统,设备及可读存储介质
技术分类

06120113098874