XAF新手入门 - 视图布局示例
前言
掌握了应用程序模型(ApplicationModel)的基础知识之后,通过一个视图布局示例来加强对应用程序模型的理解。
官网给出了比较丰富的示例,并且这些示例涵盖了应用程序模型操作的方方面面,通过这些示例你能全面的了解应用程序模型在XAF中的作用,建议大家要跟着官方示例操作一遍。
概述
视图布局应该是XAF中一个比较灵活的功能,XAF可以收集BO中定义的布局、模块的模型差异布局、用户的模型差异布局,生成最终的布局,也就是说开发人员可以定义XAF项目的初始布局,管理员可以定义统一的布局,用户可以定义个性布局,这些布局都可以通过模型编辑器(ModelEditor)来完成。对于开发人员来说在BO中定义布局算是一个比较友好的方式,XAF中也提供了与布局相关的Attribute,IndexAttribute可以控制视图项(ViewItem)在视图中的顺序,DetailViewLayoutAttribute可以对详情视图中的视图项进行分组,与模型编辑器中的布局相比,通过Attribute进行布局明显弱了许多。下面我们通过应用程序模型中的知识,实现另一种在BO中定义布局的方式。
设计思路
XML在布局中的应用还是比较广泛的,比如:WEB的HTML,WPF的XAML等,XML不仅对数据描述的能力比较强,同时层次结构也非常清晰,在本示例中我们将采用XML对我们的视图布局进行定义。下面是视图布局定义的示例代码:

上面的XML元素(Element)都对应着XAF视图布局(IModelViewLayout)中的节点
- v 对应的节点为IModelLayoutGroup,属性Direction为Vertical
- h 对应的节点为IModelLayoutGroup,属性Direction为Horizontal
- t 对应的节点为IModelTabbedGroup
- p 对应的节点为IModelLayoutViewItem
知道了节点的对应关系后,再看上面的示例代码,视图的布局结构是不是也能看出来了,如果你对这些节点不熟悉,你可以通过模型编辑器来查看这些节点的属性及呈现出来的效果。
有了视图布局的XML定义,我们可以通过ModelNodesGeneratorUpdater<ModelDetailViewLayoutNodesGenerator>对详情视图布局中的节点进行重新定义,思路就是解析XML,并将XML中的元素生成对应的节点,如果有子元素的,再遍历子元素,这里用到了递归。
模块项目结构

模块结构也比较简单,所有的逻辑代码都在DetailViewLayoutNodesGeneratorUpdater类中,DetailViewLayoutBuilderAttribute用于是否启用XML自定义布局,在BO上添加这个Attribute后,还要在BO中定义一个静态的BuildLayout方法,用于返回XML布局定义字符串。
写在最后
这里只给出了思路,没有对代码进行解读,因为代码也比较简单,同时也只有一个详细视图布局,大家可以参考代码,自己开发一个列表视图布局。
示例项目代码地址:https://gitee.com/easyxaf/view-layout-builder
XAF新手入门 - 视图布局示例的更多相关文章
- XAF新手入门 - 前言
很多小伙伴在第一次接触XAF时,会被它的丰富功能及开箱即用的特点所吸引,即使在不了解XAF的情况下,也能够依葫芦画瓢创建一个功能丰富的应用,但当应用到实际项目中时,你会发现与之前的愿景差距很大,很多都 ...
- XAF新手入门 - 类型子系统(Types Info Subsystem)
类型子系统概述 类型子系统是XAF的核心概念,但我们平时却很少关注它,它集中存储了模块中的类型,它是生成应用程序模型(Application Model)的基础,它与XAF中其它的概念都有所关联,了解 ...
- XAF新手入门 - 模块(Module)
模块概述 谈到模块大家应该都不会感到陌生,不管是前端还是后端都有模块的概念,XAF中的模块概念与大多数框架中的模块概念是相通的.XAF模块首先是一个.NET类库,同时它还包含一个继承自ModuleBa ...
- ASP.NET Core 入门教程 6、ASP.NET Core MVC 视图布局入门
一.前言 1.本教程主要内容 ASP.NET Core MVC (Razor)视图母版页教程 ASP.NET Core MVC (Razor)带有Section的视图母版页教程 ASP.NET Cor ...
- ASP.NET Core 入门笔记7,ASP.NET Core MVC 视图布局入门
一.前言 1.本教程主要内容 ASP.NET Core MVC (Razor)视图母版页教程 ASP.NET Core MVC (Razor)带有Section的视图母版页教程 ASP.NET Cor ...
- 原创:从零开始,微信小程序新手入门宝典《一》
为了方便大家了解并入门微信小程序,我将一些可能会需要的知识,列在这里,让大家方便的从零开始学习:一:微信小程序的特点张小龙:张小龙全面阐述小程序,推荐通读此文: 小程序是一种不需要下载.安装即可使用的 ...
- 课程上线 -“新手入门 : Windows Phone 8.1 开发”
经过近1个月的准备和录制,“新手入门 : Windows Phone 8.1 开发”系列课程已经在Microsoft 虚拟学院上线,链接地址为:http://www.microsoftvirtuala ...
- Linux 新手入门教程
Linux 新手入门教程 1991年10月5日,Linus Torvalds 在互联网上发布消息,宣布他自己开发的内核系统诞生了.他将内核源代码保存在芬兰最大的 FTP 网站上,命名为 Linux,取 ...
- 从零开始:微信小程序新手入门宝典《一》
为了方便大家了解并入门微信小程序,我将一些可能会需要的知识,列在这里,让大家方便的从零开始学习: 一:微信小程序的特点 张小龙:张小龙全面阐述小程序,推荐通读此文: 小程序是一种不需要下载.安装即可使 ...
- MVVM Light 新手入门(2) :ViewModel / Model 中定义“属性” ,并在View中调用
今天学习MVVM架构中“属性”的添加并调用,特记录如下,学习资料均来自于网络,特别感谢翁智华的利刃 MVVMLight系列. 一个窗口的基本模型如下: View(视图) -> ViewModel ...
随机推荐
- 从零开始配置vim(28)——DAP 配置
首先给大家说一声抱歉,前段时间一直在忙换工作的事,包括但不限于交接.背面试题准备面试.好在最终找到了工作,也顺利入职了.期间也有朋友在催更,在这里我对关注本系列的朋友表示感谢.多的就不说了,我们正式进 ...
- 多模态对比语言图像预训练CLIP:打破语言与视觉的界限
多模态对比语言图像预训练CLIP:打破语言与视觉的界限 一种基于多模态(图像.文本)对比训练的神经网络.它可以在给定图像的情况下,使用自然语言来预测最相关的文本片段,而无需为特定任务进行优化.CLIP ...
- 配置VSFTP文件服务器
FTP 文件传输协议.用于互联网上的控制文件的双向传输,使用FTP来传输时,其实是具有一定程度的危险性,因为数据在因特网上面是完全没有受到保护的明文传输方式,VSFTP是一个基于GPL发布的类Unix ...
- C# 语言程序设计笔记
C#是一种最新的.面向对象的编程语言.它使得程序员可以快速地编写各种基于Microsoft .NET平台的应用程序,Microsoft .NET提供了一系列的工具和服务来最大程度地开发利用计算与通讯领 ...
- LeetCode刷题日记 2020/8/23
题目描述 给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点). 示例 1: 输入: [5,7] ...
- 解决线程不安全的方式(Java)
一.同步代码块 package com.synchronized1; // 买票示例 // 使用同步代码块解决线程安全问题 public class TicketRunnableImp impleme ...
- Java21 + SpringBoot3集成七牛云对象存储OSS,实现文件上传
目录 前言 实现步骤 引入maven依赖 修改配置文件 创建七牛云配置类 创建文件操作服务类 创建文件操作控制器 前端实现 运行效果 总结 前言 近日心血来潮想做一个开源项目,目标是做一款可以适配多端 ...
- Oracle 11g ADG 部署(duplicate)快速参考
本文旨在指导客户完成Oracle 11g的ADG部署工作,主库环境已具备,备库环境已安装完成数据库软件. 环境:RHEL 6.8 + Oracle 11.2.0.4 1.确认主库运行在归档模式 2.确 ...
- delphi TThread.WaitFor 用法
在 Delphi 中,TThread.WaitFor 方法用于等待一个线程完成执行.当你创建一个线程并希望主线程(或其他线程)等待这个线程结束时,你可以使用这个方法. 以下是 TThread.Wait ...
- Freaktab将于12月底关闭
出过众多优秀固件的电视盒子论坛Freaktab, 将于2021年12月31日关闭 R.I.P