商信互联
在本课程中,您将学习如何创建简单动作。为此,将实现一个新的View Controller并将一个新的Simple Action添加到其中。该操作将清除特定联系人的所有跟踪任务。
View Controller是ViewController类的后代。要添加提供简单操作的View Controller,请执行以下步骤。
该XAF控制器| View Controller Visual Studio模板使向您的应用程序添加View Controller变得更加容易。在“解决方案资源管理器”中,右键单击MySolution.Module项目中的Controllers文件夹,然后选择“添加DevExpress项目”。New Item ...调用模板库。然后选择“视图控制器”,将ClearContactTasksController指定为新项目的名称,然后单击“添加项目”。结果,您将获得一个自动生成的ClearContactTasksController.cs(ClearContactTasksController.vb)文件和一个View Controller声明。
默认情况下,新控制器将在任何类型的视图中激活。由于本课的任务是清除“详细视图”中的“跟踪的任务”,因此应更改默认行为。右键单击MySolution.Module | 控制器| ClearContactTasksController.cs(ClearContactTasksController.vb)文件,然后选择“视图设计器”以调用该设计器。
在控制器的“属性”窗口中,将TargetViewType属性设置为DetailView。因此,将仅以详细信息形式激活控制器。
通过在控制器的构造函数中将ViewController.TargetViewType属性设置为ViewType.DetailView,可以在代码中完成相同的自定义。如果在调用InitializeComponent方法之后设置了属性值,则Designer设置将被覆盖。
或者,您可以实现通用的ViewController <ViewType>控制器而不是ViewController,并在ViewType通用参数中指定应为其激活该Controller的视图的类型。
接下来,将SimpleAction添加到ClearContactTasksController。在DX中。19.2:在“工具箱”中的“ XAF操作”部分,将SimpleAction拖到设计器中。
在属性窗口SimpleAction,设置名称和ID属性“ClearTasksAction”的类别属性为“查看”,将ImageName属性为“Action_Clear”和标题属性设置为“清除任务”。将ConfirmationMessage属性设置为“确定要清除“任务”列表吗?”。
甲SimpleAction被设计当最终用户点击它来执行特定代码。要清除当前Person的Tasks集合并刷新视图,请实现操作的Execute事件处理程序。切换到“属性”窗口中的“事件”视图,双击“执行”事件,然后将以下代码添加到自动生成的事件处理程序中。
实体框架
using MySolution.Module.BusinessObjects;
//...
private void ClearTasksAction_Execute(Object sender, SimpleActionExecuteEventArgs e) {
((Contact)View.CurrentObject).Tasks.Clear();
((DetailView)View).FindItem("Tasks").Refresh();
ObjectSpace.SetModified(View.CurrentObject);
}
Private Sub ClearTasksAction_Execute(ByVal sender As Object, ByVal e As SimpleActionExecuteEventArgs)
CType(View.CurrentObject, Contact).TrackedTasks.Clear()
CType(View, DetailView).FindItem("TrackedTasks").Refresh()
ObjectSpace.SetModified(View.CurrentObject)
End Sub
eXpress持久对象
using MySolution.Module.BusinessObjects;
//...
private void ClearTasksAction_Execute(Object sender, SimpleActionExecuteEventArgs e) {
while(((Contact)View.CurrentObject).Tasks.Count > 0) {
((Contact)View.CurrentObject).Tasks.Remove(((Contact)View.CurrentObject).Tasks[0]);
}
ObjectSpace.SetModified(View.CurrentObject);
}
Private Sub ClearTasksAction_Execute(ByVal sender As Object, ByVal e As SimpleActionExecuteEventArgs)
Do While (CType(View.CurrentObject, Contact)).Tasks.Count > 0
CType(View.CurrentObject, Contact).Tasks.Remove((CType(View.CurrentObject, Contact)).Tasks(0))
Loop
ObjectSpace.SetModified(View.CurrentObject)
End Sub
在ASP.NET Web应用程序中,有两种显示详细视图的模式-视图模式和编辑模式。仅当在“编辑”模式下显示“详细视图”时,“ ClearTasks操作”才可用,因此请检查当前“详细视图”的编辑模式是否已更改。如果已更改为“查看”模式,则应禁用“操作”。要实现此目的,您应该查看以下概念。
因此,处理ViewEditModeChanged事件并根据当前编辑模式修改Action的Enabled集合。为此,请返回控制器的设计器,然后在“属性”窗口的“事件”视图中双击“已激活”事件。用以下代码替换自动生成的事件处理程序。
private void ClearContactTasksController_Activated(object sender, EventArgs e) {
// Enables the ClearTasks Action if the current Detail View's ViewEditMode property
// is set to ViewEditMode.Edit.
ClearTasksAction.Enabled.SetItemValue("EditMode",
((DetailView)View).ViewEditMode == ViewEditMode.Edit);
((DetailView)View).ViewEditModeChanged =
new EventHandler<EventArgs>(ClearContactTasksController_ViewEditModeChanged);
}
// Manages the ClearTasks Action enabled state.
void ClearContactTasksController_ViewEditModeChanged(object sender, EventArgs e) {
ClearTasksAction.Enabled.SetItemValue("EditMode",
((DetailView)View).ViewEditMode == ViewEditMode.Edit);
}
Private Sub ClearContactTasksController_Activated(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Activated
' Enables the ClearTasks Action if the current Detail View's ViewEditMode property
' is set to ViewEditMode.Edit.
ClearTasksAction.Enabled.SetItemValue("EditMode", _
(CType(View, DetailView)).ViewEditMode = ViewEditMode.Edit)
AddHandler (CType(View, DetailView)).ViewEditModeChanged, _
AddressOf ClearContactTasksController_ViewEditModeChanged
End Sub
' Manages the ClearTasks Action enabled state.
Private Sub ClearContactTasksController_ViewEditModeChanged(ByVal sender As Object, _
ByVal e As EventArgs)
ClearTasksAction.Enabled.SetItemValue("EditMode", _
(CType(View, DetailView)).ViewEditMode = ViewEditMode.Edit)
End Sub
若要查看结果,请运行WinForms或ASP.NET应用程序并执行以下操作。
单击清除任务按钮,它代表您已执行的操作。确认消息将出现,如下图所示。
单击“是”(在WinForms应用程序中)或“确定”(在ASP.NET应用程序中)。所有履带任务中的联系将被清空。
尽管本主题说明了如何使用设计器创建控制器,但是控制器还是可以手动编写的类,如基本教程(SimpleProjectManager应用程序)的“定制应用程序UI和行为”主题中所示。
颅
如果需要在详细视图内放置动作,请参阅如何:在详细视图布局中包括动作。
您可以在MySolution.Module |中查看本课程中使用的代码。控制器| XAF随附的Main Demo的ClearContactTasksController.cs(ClearContactTasksController.vb)文件。该MainDemo应用程序安装在%PUBLIC%\文件\ DevExpress的演示19.2 \组件\ eXpressApp框架\ MainDemo默认。可从http://demos.devexpress.com/XAF/MainDemo/在线获得ASP.NET版本。
下一课: 添加参数化操作