XAF Blazor 中使用 Blazor 组件
前言
文章的标题是不是感觉有点奇怪,但实际我们在XAFBlazor中使用Blazor组件是很繁琐的,我们需要将Blazor组件封装成属性编辑器(PropertyEditor),再用非持久化对象(NonPersistentObject)去承载它。当我们有许多这样的Blazor组件时,不仅工作量大,同时还容易出错。下面我们通过一个巧妙的方式来减少这样重复的操作,这篇文章只是给出原理,EasyXaf.BlazorTabbedMdi模块( https://www.cnblogs.com/haoxj/p/16916525.html )对它做了实现。
演示
整体演示

基本使用
Blazor项目自带示例
在Blazor组件中添加 @attribute [ComponentNavigationItem] 就可以将Blazor组件添加到XAF导航栏中


Blazor组件中使用XAF
XAF中的很多服务都已注册到了容器中,如IObjectSpaceFactory,它可以创建一个IObjectSpace对象,通过它我们可以操作XAF中的BO,如果你想访问Application,可以注入IXafApplicationProvider,它有一个GetApplication方法。
注意:在XAF中自己创建的IObjectSpace对象,需要自己销毁,View中的IObjectSpace对象,XAF会自动销毁


模态弹窗
在Blazor组件中
前面是将Blazor组件在主窗口中显示,我们也可将其在模态窗口中显示


我们还可以给Blazor组件传递参数,同时Blazor组件也可以返回结果

Blazor组件代码

演示

在ViewController中
前面是在Blazor组件中调用弹窗,在ViewController中也是可以的

演示

原理
在继续阅读之前,你需要知道如何将Blazor组件集成到XAF中去,在有了上面所说的知识后,我们说一下它的实现原理及注意事项。
我们知道在导航项(IModelNavigationItem)中有ObjectKey属性及View属性,将View设置为一个详情视图(DetailView),将ObjectKey设置为相应的主键,就可以直接导航到对应的详情。我们将其改造一下,详情视图是展示Blazor组件的视图,而ObjectKey是Blazor组件的类型名称,这样我们就可以设置不同的ObjectKey值来展示不同的Blazor组件。详情视图的ModelClass是一个非持久化对象,代码如下:

由于非持久化对象的数据需要我们自己提供,我们可以订阅NonPersistentObjectSpace的ObjectByKeyGetting事件,通过Key的值返回对应的Blazor组件类型,代码如下:

需要注意ObjectKey中不能包含点(.),由于XAFBlazor会将ObjectKey作为Url的一部分,而Blazor中对点的处理是请求文件,所以这里我们将点替换为减号(-)。
当我们得到了Blazor组件的类型后,我们就可以将其展示出来,代码如下:

DynamicComponent可以通过类型动态加载组件
上面就是在XAF中使用Blazor组件的思路,如果想再丰富一些,可以创建一个ComponentNavigationItemAttribute,将其放到Blazor组件中,用于收集导航,这是XAF模型的知识,可以参考之前的文章。

写在最后
在XAFBlazor中直接使用Blazor组件,是一种新的开发体验,这样可以最大程度的扩展XAFBlazor功能,同时也可充分利用WEB开发社区的其它组件。
XAF Blazor 中使用 Blazor 组件的更多相关文章
- [AspNetCore 3.0] 在RazorPages/MVC 中使用 Blazor (Razor组件)
开发环境 Vs2019 16.3.1 dotnetcore 3.0 一.开始 新建webapp项目 dotnet new webapp -o projectname 或Vs 中新建项目选择 Web应用 ...
- 【Blazor】在ASP.NET Core中使用Blazor组件 - 创建一个音乐播放器
前言 Blazor正式版的发布已经有一段时间了,.NET社区的各路高手也创建了一个又一个的Blazor组件库,其中就包括了我和其他小伙伴一起参与的AntDesign组件库,于上周终于发布了第一个版本0 ...
- Blazor中的无状态组件
声明:本文将RenderFragment称之为组件DOM树或者是组件DOM节点,将*.razor称之为组件. 1. 什么是无状态组件 如果了解React,那就应该清楚,React中存在着一种组件,它只 ...
- Blazor组件自做十三: 使用 Video.js 在 Blazor 中播放视频
Video.js 是一个具有大量功能的流行的视频和音频 JavaScript 库,今天我们试试集成到 Blazor . Blazor VideoPlayer 视频播放器 组件 示例 https://b ...
- 在Asp.net Razor Pages/MVC程序中集成Blazor
今天试了一下在Asp.net core Razor Pages/MVC程序中集成Blazor(Server-side),还是可以完美整合的,这里以Razor Pages为例(.net core 3.1 ...
- Blazor中的CSS隔离
1.环境 VS 2019 16.9.0 Preview 1.0 .NET SDK 5.0.100 2.前言 CSS一旦生效,就会应用于全局,所以很容易出现冲突.为了解决这个问题CSS隔离就顺势而生.B ...
- Blazor和Vue对比学习(基础1.8):Blazor中实现计算属性和数据监听
1.7章<传递UI片断>,需要做几个案例,这部分暂停消化几天.我们先把基础部分相对简单的最后两章学习了. 计算属性和数据监听是Vue当中的概念,本质上都是监听数据的变化,然后做出响应.两者 ...
- Blazor和Vue对比学习(知识点杂锦3.04):Blazor中C#和JS互操作(超长文)
C#和JS互操作的基本语法是比较简单的,但小知识点特别多,同时,受应用加载顺序.组件生命周期以及参数类型的影响,会有比较多坑,需要耐心的学习.在C#中调用JS的场景会比较多,特别是在WASM模式下,由 ...
- 【ASP.NET Core】在Blazor中获取 HTTP 上下文信息
今天咱们来扯一下 Blazor 应用程序怎么访问 HttpContext.其实这句话有坑,为了避免大伙伴们掉茅坑,老周直接说明:Blazor 是不能访问 HttpContext 的.哪怕你在服务容器中 ...
- 如何实现在react现有项目中嵌入Blazor?
如何实现在react现有项目中嵌入Blazor? 目前官方只提供了angular和react俩种示例所以本教程只将react教程 思路讲解: 首先在现有react项目中我们可能某些组件是在Blazor ...
随机推荐
- 离线下载和安装UWP(windows应用商店)软件
离线下载uwp安装包 打开商店,然后搜索您要的应用程序名称,进入应用界面 点击 分享按钮,在弹出窗口中选择[复制链接] 把链接粘贴到:https://store.rg-adguard.net/ 默认选 ...
- ElasticSearch安装、插件介绍及Kibana的安装与使用详解
ElasticSearch安装.插件介绍及Kibana的安装与使用详解 1.安装 ElasticSearch 1.1 安装 JDK 环境 因为 ElasticSearch 是用 Java 语言编写的, ...
- 【5】数据可视化pygal,画出美观的图表
相关文章: 全网最详细超长python学习笔记.14章节知识点很全面十分详细,快速入门,只用看这一篇你就学会了! [1]windows系统如何安装后缀是whl的python库 [2]超级详细Pytho ...
- 驱动开发:通过SystemBuf与内核层通信
内核层与应用层之间的数据交互是必不可少的部分,只有内核中的参数可以传递给用户数据才有意义,一般驱动多数情况下会使用SystemBuf缓冲区进行通信,也可以直接使用网络套接字实现通信,如下将简单介绍通过 ...
- 搭建私有仓库Registry(Docker Hub)
搭建私有仓库Registry(Docker Hub) 安装Docker 拉取仓库镜像:# docker pull registry 生成认证certificate mkdir ~/certs open ...
- 苹果正在测试新款Mac mini:搭载M3芯片 配备24GB大内存
据悉苹果目前正在测试新的Mac机型,亮点是采用最新的M3芯片. 据报道,首款搭载M3芯片的设备应该是13英寸的MacBook Pro和重新设计的MacBook Air,Mac mini机型并不在名单上 ...
- PHP中GD库
PHP中GD库 一.GD库的介绍 1.GD库是什么? Graphic Device,图像工具库,gd库是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成 ...
- 面试官:你能简单聊聊MyBatis执行流程
本文分享自华为云社区<面试必问|聊聊MyBatis执行流程?>,作者: 冰 河. MyBatis源码解析 大家应该都知道Mybatis源码也是对Jbdc的再一次封装,不管怎么进行包装,还是 ...
- 探索C语言的数据类型:解密编程世界的核心秘密
欢迎大家来到贝蒂大讲堂 养成好习惯,先赞后看哦~ 所属专栏:C语言学习 贝蒂的主页:Betty's blog 1. 常量与变量 1.1 常量 (1) 常量的概念 常量顾名思义就是无法改变的量,比如一周 ...
- 对未来的自己的一个提醒。关于打表答题的思路,洛谷P5731
P5731 [深基5.习6]蛇形方阵 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 这道题就是纯纯找规律的模拟题,但是在比赛或者思维比较松散的情况下紧张的时候会想不出模拟思路 这时 ...