前言

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. C#对象属性浅拷贝和深拷贝

    对象属性和字段拷贝的几种方式 微软提供了浅拷贝 对于值类型,修改拷贝的值不会影响源对象 对于引用类型,修改拷贝后的值会影响源对象,但string特殊,它会拷贝一个副本,互相不会影响 自己实现深拷贝,我 ...

  2. 通过docker-compose搭建mongo的replica set高可用

    通过docker-compose搭建mongo的replica set高可用 前言 备份数据 备份数据到本地 数据恢复 集群搭建 生成keyFile 创建yml文件 初始化副本集 增加副本集 将节点初 ...

  3. el-select添加全部选项

    /**给返回的搜索条件插入全部**/ global.addAll = function (list) { let addAllList = list addAllList.unshift({label ...

  4. 基于50W携程出行攻略构建事件图谱(含码源):交通工具子图谱、订酒店吃饭事件图谱等

    基于50W携程出行攻略构建事件图谱(含码源):交通工具子图谱.订酒店吃饭事件图谱等 项目构成 本项目由两个部分的组成,具体包括语料的获取以及基于语料的事件挖掘两个部分,具体项目目录包括: news_s ...

  5. NLP涉及技术原理和应用简单讲解【一】:paddle(梯度裁剪、ONNX协议、动态图转静态图、推理部署)

    参考链接: https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/advanced/gradient_clip_cn.html 1. ...

  6. 解决问题:ACM-Reference-Format使用这个style后,文献引用顺序和正文不一致

    解决问题:latex中bib引用顺序不正确,引用顺序和正文不一致_丨汀.的博客-CSDN博客问题:生成pdf时文献应用会乱序引用bib格式的参考文献时,会这么写:\bibliographystyle{ ...

  7. 1.7 完善自定位ShellCode

    在之前的文章中,我们实现了一个正向的匿名管道ShellCode后门,为了保证文章的简洁易懂并没有增加针对调用函数的动态定位功能,此类方法在更换系统后则由于地址变化导致我们的后门无法正常使用,接下来将实 ...

  8. 从嘉手札<2023-10-16>

    一.商君书 1)更法 商鞅和甘龙.杜挚同秦孝公商量变法. 后两者认为变法会动移已有的社会结构,"圣人不易民而教,知者不变法而治""法古无过,循礼无邪" 但商鞅( ...

  9. IDEA破解(无限重启激活时间版)

    下载地址[将下载的目录打成zip压缩包后使用]:「ide-eval-resetter」https://www.aliyundrive.com/s/UFHpDX5d6Xv 点击链接保存,或者复制本段内容 ...

  10. Vite4+Typescript+Vue3+Pinia 从零搭建(1) - 项目初始化

    项目代码同步至码云 weiz-vue3-template 前提准备 1. node版本 Node.js版本 >= 12,如果有老项目需要旧版本的,推荐用 nvm 管理node版本. PS C:\ ...