前言

XAF列表视图(ListView)中的过滤(Filter),可以在ListView模型的Filters节点中添加,添加的过滤项(FilterItem)会在列表视图的工具栏中以下拉列表的形式显示,WinForm与Blazor是一致的。当过滤项的个数比较少时,这是一个不错的选择。如果过滤项比较多,并且想通过树形结构进行组织时,就需要我们自定义实现了,常见的形式就是在列表的左侧放置一个过滤面板,后面有它的实现原理,EasyXaf.BlazorTabbedMdi模块( https://www.cnblogs.com/haoxj/p/16916525.html )对它做了实现。

演示

PC端演示

PC端过滤列表是放置在列表视图左侧

移动端演示

移动端过滤列表是采用弹窗显示

基本使用

启用过滤面板

  • EnableFilterPanel:是否启用过滤面板,默认为false
  • ShowFilterPanel:是否显示过滤面板,过滤面板是可以显示及隐藏的,启用过滤面板后才有效,默认为true
  • FilterPanelWidth:过滤面板宽度,默认为250

启用过滤面板后将会隐藏工具栏中的过滤下拉列表

添加过滤项

过滤项的分组可通过两种方式实现

  1. 过滤项Caption属性使用斜线(/)分隔,分段的最后一个是过滤项名,其它的为组名(第一个为根,其它类推)
  2. 过滤项GroupName属性填写组名,使用斜线(/)分隔(行为与第一种方式一致)

第一种方式在添加或查看时更直观,但如果想用XAF自带的过滤,它会显示所有的部分,第二种是为了兼顾上面提到的问题,优先级比第一种方式高。

启用后的界面

记录上次选择的过滤项

这个与XAF自带的过滤行为是保持一致的

过滤面板工具栏

工具栏包含了折叠、展开及清除过滤,下面是演示

显示及隐藏过滤面板

原理

实现过滤面板有两种方式

  1. 创建自定义GridListEditor,这种方式是一种比较标准的方式,同时也是适用性最强的,在有ListView的地方都可以使用,但实现起来也是最复杂的。

  2. 使用自定义WindowTemplate模板,将过滤面板放置在相应位置,当View为ListView时,将其显示出来。这种方式适应性不强,只能使用自定义模板的地方才能显示,但实现起来比较简单。

我们这里采用的是第二种方式,以后我们也会采用第一种方式来实现。有了上面的思路后,实现方法也比较简单,下面我把实现步骤及注意事项说一下。

  1. 从模型中读取过滤列表,这是应用程序模型的知识,可以参考之前的文章

  2. 由于从模型读取的过滤列表是扁平的,需要根据规则将其转换为树形结构,我们需要创建一个FilterItem类,它同时也是用于Tree控件进行数据绑定的类,代码如下:

  3. 创建一个Blazor组件将过滤列表树显示出来,这里用到了DxTreeView组件,工具栏使用的是DxToolbar组件,同时在Blazor组件添加一个ListView参数属性,我们可以通过ListView读取过滤列表,应用选择的过滤项等操作。

  4. 创建一个针对ListView的ViewController,用于显示及隐藏过滤面板及启用过滤面板后隐藏XAF自带的过滤列表等操作。

  5. 想在移动端弹窗显示过滤列表,这是上篇文章提到的内容(https://www.cnblogs.com/haoxj/p/16921586.html)

以上就是过滤面板实现的大体流程,感兴趣的可以自己实现一下。

XAF Blazor FilterPanel的更多相关文章

  1. XAF新手入门 - 模块(Module)

    模块概述 谈到模块大家应该都不会感到陌生,不管是前端还是后端都有模块的概念,XAF中的模块概念与大多数框架中的模块概念是相通的.XAF模块首先是一个.NET类库,同时它还包含一个继承自ModuleBa ...

  2. XAF新手入门 - 前言

    很多小伙伴在第一次接触XAF时,会被它的丰富功能及开箱即用的特点所吸引,即使在不了解XAF的情况下,也能够依葫芦画瓢创建一个功能丰富的应用,但当应用到实际项目中时,你会发现与之前的愿景差距很大,很多都 ...

  3. XAF新手入门 - 类型子系统(Types Info Subsystem)

    类型子系统概述 类型子系统是XAF的核心概念,但我们平时却很少关注它,它集中存储了模块中的类型,它是生成应用程序模型(Application Model)的基础,它与XAF中其它的概念都有所关联,了解 ...

  4. 如何汉化XAF应用

    这是一个入门级的问题,应网友请求,总结一下XAF汉化过程的几个关键点. 一.所有Dev的控件的汉化,Dev官方有汉化文件.点击下载15.2版本. 正版用户登陆至官网是有专门的下载界面的,并且可以参与汉 ...

  5. XAF视频教程来啦,已出7课

        XAF交流学习群内的兄弟录制了视频,他没有博客,委拖我发至博客园,希望能让更多的开发人员受益.快速开发企业级应用的好工具!   XAF入门01快速浏览   XAF入门02特点. XAF入门03 ...

  6. XAF 如何基于业务规则禁用属性

    // Developer Express Code Central Example: // How to: Disable Property Editors Based on a Business R ...

  7. XAF 如何将数据库中Byte array图片显示出来

    问题比较简单,直接上代码. private Image _Cover; [Size(SizeAttribute.Unlimited), ValueConverter(typeof(ImageValue ...

  8. XAF视频教程来啦,已出15课

    第一到第七课在这里: http://www.cnblogs.com/foreachlife/p/xafvideo_1_6.html 视频地址:http://i.youku.com/i/UMTI5OTE ...

  9. XAF:如何让用户在运行时个性化界面并将个性化信息保存到数据库中 win/web/entityframework/xpo

    本主题介绍如何启用管理模型差异(XAFML),并将设置存储在数据库中.   名词解释: 1.模型:XAF中把所有应用程序的结构都用模型来定义,比如列表,有哪些列,名称是什么,对应的字段名是什么,业务对 ...

  10. XAF点滴:很具体很用实用---处理三个小问题

    以下内容全部为web版本的老模板风格下完成. 一.在编辑状态的详细视图下打印报表. 有些时候,需要在编辑状态下直接打印报表内容,官方默认是不允许这样做的.用Reflector查看源码,可以看到: De ...

随机推荐

  1. linxu下面的绝对路径和相对路径

    绝对路径和相对路径 前言 相对路径与绝对路径 绝对路径 相对路径 目录的相关操作 绝对路径和相对路径 前言 学习linux,对于里面的路径肯定要很清楚.做下总结吧. 相对路径与绝对路径 绝对路径 路径 ...

  2. PaddleHub--{超参优化AutoDL Finetuner}【二】

     相关文章: 基础知识介绍: [一]ERNIE:飞桨开源开发套件,入门学习,看看行业顶尖持续学习语义理解框架,如何取得世界多个实战的SOTA效果?_汀.的博客-CSDN博客_ernie模型 百度飞桨: ...

  3. 给Java小白,整理一套能上手的简单编程算法题!!!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 数学离程序员有多近? ifelse也好.for循环也罢,代码可以说就是对数学逻辑的具 ...

  4. windows 10 制作招聘系统镜像

    我一直以来都有个想法,就是彻底攻破重装系统这块,但是一直没有时间 没有攻破,今天终于攻破.参考了文章:https://www.cnblogs.com/del88/p/12667087.html 需求: ...

  5. DbgridEh 导出 Excel 如果字段长度超过255会截断,那如何导出,另一种神奇的方法

    由于DbgridEh 导出 Excel 如果字段长度超过255会截断,所以必须换一种方法来导出,百度  谷歌 看了上百帖,都是有这句: xlApp := CreateOleObject('Excel. ...

  6. AdoQuery 多列 查询 定位方法

    frmClientDm.TopItemSkuShow_adoq.Locate('top_outer_iid;top_outer_sid', VarArrayOf([top_outer_iid,top_ ...

  7. 基于C#的屏幕鼠标跟随圈圈应用 - 开源研究系列文章

    去年8月的时候无聊,想起博客网页中的鼠标跟随圈圈效果,于是就想用C#在Windows操作系统级别的基础上去开发一个类似的应用,于是有了此文.上次在博问里也发帖咨询了一下( https://q.cnbl ...

  8. IIS创建和管理虚拟网站

    实验介绍: 本文会详细介绍创建虚拟站点的三种方法 一:IP地址建立站点 1.打开安装了IIS的windows,进入ip配置页面. 添加几个ip,我这里添加的是192.168.1.209,192.168 ...

  9. C++ map自定义比较函数遵守严格弱序

    C++ map自定义比较函数遵守严格弱序 问题背景及定位 背景:这个问题是在将tablesaw(一个Java的数据处理项目)迁移到C++时出现的. 问题位置:SplitOn()函数,在数据流水线中的a ...

  10. NEMU PA 3-1 实验报告

    一.实验目的 在前面的PA1中,我们实现了CPU和FPU,在PA2中我们实现了对指令的解码和对ELF的装载,以及进一步完善了CLI调试器.那么在整个PA3中,我们将要着力于内存的相关处理,如Cache ...