前言

文章的标题是不是感觉有点奇怪,但实际我们在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 组件的更多相关文章

  1. [AspNetCore 3.0] 在RazorPages/MVC 中使用 Blazor (Razor组件)

    开发环境 Vs2019 16.3.1 dotnetcore 3.0 一.开始 新建webapp项目 dotnet new webapp -o projectname 或Vs 中新建项目选择 Web应用 ...

  2. 【Blazor】在ASP.NET Core中使用Blazor组件 - 创建一个音乐播放器

    前言 Blazor正式版的发布已经有一段时间了,.NET社区的各路高手也创建了一个又一个的Blazor组件库,其中就包括了我和其他小伙伴一起参与的AntDesign组件库,于上周终于发布了第一个版本0 ...

  3. Blazor中的无状态组件

    声明:本文将RenderFragment称之为组件DOM树或者是组件DOM节点,将*.razor称之为组件. 1. 什么是无状态组件 如果了解React,那就应该清楚,React中存在着一种组件,它只 ...

  4. Blazor组件自做十三: 使用 Video.js 在 Blazor 中播放视频

    Video.js 是一个具有大量功能的流行的视频和音频 JavaScript 库,今天我们试试集成到 Blazor . Blazor VideoPlayer 视频播放器 组件 示例 https://b ...

  5. 在Asp.net Razor Pages/MVC程序中集成Blazor

    今天试了一下在Asp.net core Razor Pages/MVC程序中集成Blazor(Server-side),还是可以完美整合的,这里以Razor Pages为例(.net core 3.1 ...

  6. Blazor中的CSS隔离

    1.环境 VS 2019 16.9.0 Preview 1.0 .NET SDK 5.0.100 2.前言 CSS一旦生效,就会应用于全局,所以很容易出现冲突.为了解决这个问题CSS隔离就顺势而生.B ...

  7. Blazor和Vue对比学习(基础1.8):Blazor中实现计算属性和数据监听

    1.7章<传递UI片断>,需要做几个案例,这部分暂停消化几天.我们先把基础部分相对简单的最后两章学习了. 计算属性和数据监听是Vue当中的概念,本质上都是监听数据的变化,然后做出响应.两者 ...

  8. Blazor和Vue对比学习(知识点杂锦3.04):Blazor中C#和JS互操作(超长文)

    C#和JS互操作的基本语法是比较简单的,但小知识点特别多,同时,受应用加载顺序.组件生命周期以及参数类型的影响,会有比较多坑,需要耐心的学习.在C#中调用JS的场景会比较多,特别是在WASM模式下,由 ...

  9. 【ASP.NET Core】在Blazor中获取 HTTP 上下文信息

    今天咱们来扯一下 Blazor 应用程序怎么访问 HttpContext.其实这句话有坑,为了避免大伙伴们掉茅坑,老周直接说明:Blazor 是不能访问 HttpContext 的.哪怕你在服务容器中 ...

  10. 如何实现在react现有项目中嵌入Blazor?

    如何实现在react现有项目中嵌入Blazor? 目前官方只提供了angular和react俩种示例所以本教程只将react教程 思路讲解: 首先在现有react项目中我们可能某些组件是在Blazor ...

随机推荐

  1. python处理Excel实现自动化办公教学(含实战)【一】

    相关文章: python处理Excel实现自动化办公教学(含实战)[一] python处理Excel实现自动化办公教学(含实战)[二] python处理Excel实现自动化办公教学(数据筛选.公式操作 ...

  2. 4.6 Windows驱动开发:内核遍历进程VAD结构体

    在上一篇文章<内核中实现Dump进程转储>中我们实现了ARK工具的转存功能,本篇文章继续以内存为出发点介绍VAD结构,该结构的全程是Virtual Address Descriptor即虚 ...

  3. Typora+PicGo+码云Gitee搭建本地博客环境

    Typora+PicGo+码云Gitee搭建本地博客环境 前期准备: 安装Typora 安装链接:https://typora.io/ 安装PicGo 安装链接:https://github.com/ ...

  4. Shiro 框架的MD5加密算法实现原理

    直接上代码:该代码可以直接用于项目中做MD5加密,加盐加密,多层散列加密 import java.io.UnsupportedEncodingException; import java.securi ...

  5. 【Unity3D】UGUI之Slider

    1 Slider属性面板 ​ 在 Hierarchy 窗口右键,选择 UI 列表里的 Slider 控件,即可创建 Slider 控件,选中创建的 Slider 控件,按键盘[T]键,可以调整 Sli ...

  6. seq2seq模型案例分析

    1 seq2seq模型简介 seq2seq 模型是一种基于[ Encoder-Decoder](编码器-解码器)框架的神经网络模型,广泛应用于自然语言翻译.人机对话等领域.目前,[seq2seq+at ...

  7. 【OpenGL ES】立方体贴图(6张图)

    1 前言 ​ 本文通过一个立方体贴图的例子,讲解三维纹理贴图的应用,案例中使用 6 张不同的图片给立方体贴图,图片如下: ​ 本文涉及到的知识点主要包含:三维绘图.MVP 矩阵变换.纹理贴图,读者如果 ...

  8. Taurus.MVC WebMVC 入门开发教程2:一个简单的页面呈现

    前言: 在上一篇中,我们了解了如何下载.配置和运行 Taurus.MVC WebMVC 框架. 现在,让我们开始编写一个简单的页面并进行呈现. 步骤1:创建控制器 首先,我们需要创建一个控制器来处理页 ...

  9. Lucene介绍与使用

    Lucene介绍与使用 原文链接:https://blog.csdn.net/weixin_42633131/article/details/82873731 不选择使用Lucene的6大原因? 原文 ...

  10. 看看 ChatGPT 给的前端面试题

    以下是一些可能出现在中国互联网公司前端开发工程师面试中的题目: 解释一下 CSS 盒模型,并说明其中的各个部分. 请解释一下响应式设计是什么,以及你是如何实现响应式设计的. 什么是跨域资源共享(COR ...