XAF-如何改变列表点击时的默认行为
在 Windows 窗体应用程序中,按下回车或双击列表会打开默认的详细视图。
在 ASP.NET Web 应用程序中,单击对象时执行此操作。
这一行为是由 ListViewProcessCurrentObjectController 的 ListViewProcessCurrentObjectController.ProcessCurrentObjectAction 按钮所定义的。
可以将此操作替换为自定义的简单操作。下面演示如何执行此操作。
有下面的BO定义,地址记录。
[DefaultClassOptions, ImageName("BO_Contact")]
public class AddressBookRecord : BaseObject {
public AddressBookRecord(Session session) : base(session) { }
private string name;
public string Name {
get { return name; }
set { SetPropertyValue("Name", ref name, value); }
}
private string email;
public string Email {
get { return email; }
set { SetPropertyValue("Email", ref email, value); }
}
private string phoneNumber;
public string PhoneNumber {
get { return phoneNumber; }
set { SetPropertyValue("PhoneNumber", ref phoneNumber, value); }
}
}
现在并为AddressBookRecord 对象操作加一个WriteMailController,并填加 WriteMail Action。这个操作将调用与最终用户的计算机上的 MailTo 协议相关联的程序。说白了就是发个邮件,调用邮件客户端。
using System.Diagnostics;
// ...
public class WriteMailController : ViewController {
private SimpleAction writeMailAction;
public WriteMailController() {
TargetObjectType = typeof(AddressBookRecord);
writeMailAction = new SimpleAction(this, "WriteMail", PredefinedCategory.Edit);
writeMailAction.ToolTip = "Write e-mail to the selected address book record";
writeMailAction.SelectionDependencyType = SelectionDependencyType.RequireSingleObject;
writeMailAction.ImageName = "BO_Contact";
writeMailAction.Execute += writeMailAction_Execute;
}
void writeMailAction_Execute(object sender, SimpleActionExecuteEventArgs e) {
AddressBookRecord record = (AddressBookRecord)e.CurrentObject;
string startInfo = String.Format(
"mailto:{0}?body=Hello, {1}!%0A%0A", record.Email, record.Name);
Process.Start(startInfo);
}
}
默认情况下,只有选中了列表中的一条记录后,再点击上面我们填加的按钮,才会执行调用邮件客户端的动作。
下面,我们演示,在win中双击列表,即执行上面的动作。
using DevExpress.ExpressApp.SystemModule;
// ...
public class WriteMailController : ViewController {
// ...
private ListViewProcessCurrentObjectController processCurrentObjectController;
protected override void OnActivated() {
base.OnActivated();
processCurrentObjectController =
Frame.GetController<ListViewProcessCurrentObjectController>();
if (processCurrentObjectController != null) {
processCurrentObjectController.CustomProcessSelectedItem +=
processCurrentObjectController_CustomProcessSelectedItem;
}
}
private void processCurrentObjectController_CustomProcessSelectedItem(object sender, CustomProcessListViewSelectedItemEventArgs e) {
e.Handled = true;
writeMailAction.DoExecute();
}
protected override void OnDeactivated() {
if (processCurrentObjectController != null) {
processCurrentObjectController.CustomProcessSelectedItem -=
processCurrentObjectController_CustomProcessSelectedItem;
}
base.OnDeactivated();
}
}
下面是效果:

这时你会发现,你没办法修改记录了,即详细视图没办法显示出来了。下面代码来解决这样的问题,即,加个控制器,实现这些功能。
using DevExpress.ExpressApp.SystemModule;
// ...
public class EditAddressBookRecordController : ViewController<ListView> {
public EditAddressBookRecordController() {
TargetObjectType = typeof(AddressBookRecord);
SimpleAction editAddressBookRecordAction =
new SimpleAction(this, "EditAddressBookRecord", PredefinedCategory.Edit);
editAddressBookRecordAction.ImageName = "Action_Edit";
editAddressBookRecordAction.SelectionDependencyType =
SelectionDependencyType.RequireSingleObject;
editAddressBookRecordAction.Execute += editAddressBookRecordAction_Execute;
}
void editAddressBookRecordAction_Execute(object sender, SimpleActionExecuteEventArgs e) {
ListViewProcessCurrentObjectController.ShowObject(
e.CurrentObject, e.ShowViewParameters, Application, Frame, View);
}
}

注意:在web中没这个问题,所以不用管。
XAF-如何改变列表点击时的默认行为的更多相关文章
- 去除input标签点击时的默认样式
去除input标签点击时的默认样式的方法 outline:none; //去除点击时的边框 border : none; //去除input框的边框
- 修改Sharepoint 文档库列表点击Excel文件默认跳转到Excel Service服务 xlviewer.aspx页面
在Sharepoint 文档库中,当点击库中的一个Excel文件时,Sharepoint默认为转跳到Excel Services上,无论是Sharepoint 的是否开启了Excel Service, ...
- 去掉input框点击时的默认颜色
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 < ...
- vue点击时动态改变样式 ------- 最简单的方法
vue点击时动态改变样式 template中 <li :class="{ active:index==isActive }" @click="changeValue ...
- XAF:如何让用户在运行时个性化界面并将个性化信息保存到数据库中 win/web/entityframework/xpo
本主题介绍如何启用管理模型差异(XAFML),并将设置存储在数据库中. 名词解释: 1.模型:XAF中把所有应用程序的结构都用模型来定义,比如列表,有哪些列,名称是什么,对应的字段名是什么,业务对 ...
- 取消a标签在移动端点击时的背景颜色
一.取消a标签在移动端点击时的蓝色 -webkit-tap-highlight-color: rgba(255, 255, 255, 0); -webkit-user-select: none; -m ...
- 改变MyEclipse创建JSP时默认的pageEncoding编码
如何改变MyEclipse创建JSP时默认的pageEncoding编码 有时我们需要改变MyEclipse创建JSP时默认的pageEncoding编码,因为也许它默认的编码不是我们想要的,比如我们 ...
- IOS 开发之-- textfield和textview,return键的改变,点击return键
IOS 开发之-- textfield和textview,return键的改变,点击return键 一,textfield的return键改变 方案1.改变键盘右下角的换行(enter)键为完成键,后 ...
- 取消a标签或者onclick在移动端点击时的背景颜色
一.取消a标签在移动端点击时的蓝色 -webkit-tap-highlight-color: rgba(, , , ); -webkit-user-select: none; -moz-user-fo ...
随机推荐
- ArcFac_C#_DEMO开发
手上有一个项目,需要检验使用本程序的,是否本人!因为在程序使用前,我们都已经做过头像现场采集,所以源头呢是不成问题的,那么人脸检测,人脸比对,怎么办呢?度娘了下,目前流行的几个人脸检测,人脸比对核心, ...
- c++ 有swap函数
这是剑指offer数组中重复的数字那个题,直接使用的swap函数 class Solution { public: // Parameters: // numbers: an array of int ...
- Luogu_4197 Peaks
P4197 Peaks 并不会克鲁斯卡尔重构树,于是就写了离线算法. 使用了最小生成树,启发式合并treap 在最小生成树,克鲁斯卡尔算法 时 ,将询问一块处理.便可以保证询问时边的要求.然后利用平衡 ...
- OPENGL绘制文字
OPENGL没有提供直接绘制文字的功能,需要借助于操作系统. 用OPENGL绘制文字比较常见的方法是利用显示列表.创建一系列显示列表,每个字符对应一个列表编号.例如,'A'对应列表编号1000+'A' ...
- 【OC底层】一个OC对象占用多少内存?
查看一个NSObject对象占用多少内存 1.引入头文件: #import <objc/runtime.h> #import <malloc/malloc.h> 2.代码如下: ...
- Vue如何循环渲染图片
Vue如何把服务器返回的图片数据渲染出来 首先,一般来说,当请求图片的接口时,会返回一个数组,这个数组里会是一些图片的名字,比如1.jpg,2.jpg. 我的做法是先在data里定义一个数组,来存储服 ...
- Python基础 条件判断和循环
pyhton if 语句 if 语句后接表达式,然后用: 表示代码块. age = 20 if age >= 18: print 'your age is', age print 'adult' ...
- Java 常见BUG 整理
1.BigDecimal初始化double 2.Integer java对于-128到127之间的数,会进行缓存,这个范围的Integer对象是同一个! == 是ok,但是超出这个范围就不可以用 ...
- WebGl 缩放(矩阵变换)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- iOS 12.0-12.1.2 越狱教程
unc0ver V3.0.0~b29 越狱工具已经开始公测,支持搭载 A8X-A11 处理器的 iOS 12.0-12.1.2 设备完整越狱,Cydia 商店和 Substrate 插件可正常安装并运 ...