EPR类企业管理系统

在我们现有系统基础上或全新开发,提供定制服务
为您的企业高效快速实施ERP,WMS,MES,CRM管理系统
全面管控物料仓库、销售业务、采购业务、仓库业务
生产过程、质量检验、组织架构、业务报表


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

控制器

构建eXpressApp Framework应用程序的过程可以分为几个步骤。第一步是业务模型的实现,第二步是默认的UI定制,第三步是定制功能开发(以更改应用程序的流程并实现定制的最终用户交互)。对于最后一步,您将需要使用控制器。eXpressApp Framework提供了许多内置控制器,这些控制器在生成默认UI时使用。例如,验证,导航和搜索功能已包含在默认UI中。要实现自定义功能,您将需要创建一个Controller-从ControllerViewController或WindowController派生的类班级。本主题说明如何正确执行此操作。

控制器概述

控制器具有两个主要目的:

  • 创建或销毁窗口(框架)时,请执行特定的操作。

    当一个窗口(帧)被创建,所有被用于它的控制器被激活,这意味着他们的特殊事件被触发(见Controller.Activated)。您可以处理这些事件,以实现与当前Window(框架)或其View相关的功能。丢弃窗口(框架)时,将停用其控制器,这意味着将引发其特殊事件(请参阅Controller.Deactivated)。这使您可以在关闭窗口或处置框架时执行特定的操作。

  • 扩展用户界面

    在大多数情况下,功能需要最终用户交互。为此,控制器可以用作Actions的容器。动作是代表抽象UI元素的对象,可以使用实际控件(按钮,组合框,子菜单等)显示在UI中。要使用动作控件来响应最终用户的操作,请处理相应的动作事件。

与大多数XAF实体一样,在应用程序模块中找到的关于Controllers的信息将被加载到Application Model中。您可以在IModelControllers节点中访问Controller设置。请参考该节点的描述以获取有关可能的自定义的信息。

WindowController,ViewController和Controller类

从物理上讲,控制器是控制器类的后代。请注意,您无需创建此类的直接后代即可为您的应用程序提供Controller。相反,您将处理两个预定义的后代-ViewController(包括其通用版本:ViewController <ViewType>ObjectViewController <ViewType,ObjectType>)和WindowController。这些类提供Controller.ActivatedController.Deactivated事件,这些事件使您可以在创建或销毁相应的Window(框架)时执行特定的操作。要在这些事件处理程序中访问窗口(框架)或其视图,请使用ViewController类提供Controller.FrameViewController.View属性。该WindowController类公开使用相应的窗口WindowController.Window财产。

尽管这两个类有很多共同点,但是您应该在不同的情况下使用它们。现在更多有关此的内容。

查看控制器

View Controller用于实现View的功能(过滤器或搜索功能等)。基本上,每次需要实现数据感知功能时,都需要使用View Controller。

视图控制器中包含的动作与为其激活了控制器的视图一起。例如,如果为嵌套列表视图(集合属性的列表视图)激活了控制器,则其操作将附加到该视图,而不是整个窗口。

NestedFrameTemplate

将视图设置为窗口/框架时,将同时为Windows和框架激活视图控制器。但是,您可以指定需要包含在“窗口”或“框架”中的视图的类型或ID。为此,请使用以下ViewController的属性:

车窗控制器

创建窗口或框架时,将激活窗口控制器,该窗口控制器旨在实现Windows的功能,即与特定视图无关的功能。因此,在大多数情况下,这些功能与数据无关。例如,可以使用Controller更改主窗口中导航控件的外观(请参阅“如何:访问导航控件”主题以查看示例)。无论当前显示的是什么视图,窗口控制器中包含的动作始终显示在窗口中。

窗口控制器仅适用于Windows。您还可以指定将为其激活控制器的窗口类型。为此,请使用Controller的WindowController.TargetWindowType属性。可以将其值设置为“任意”,“主要”或“子”。请注意,XAF应用程序只有一个“主”窗口,该窗口首先显示。其余的是子窗口。

实施自定义控制器

如果Controller及其操作与UI无关,则应在Module Project中实现它。同时,可能存在特定于UI的任务。在这种情况下,应在特定于UI的模块中开发控制器。请注意,应始终在XAF模块内声明控制器。如果将Controller添加到应用程序项目中,则不会发现它并将其自动插入到您的应用程序中。

您可以使用现成的Controller模板来创建自定义Controller。在解决方案资源管理器中,选择要添加控制器的模块项目。右键单击位于项目内部的Controllers文件夹以调用上下文菜单,然后选择“添加DevExpress项” |“添加”。New Item ...调用DevExpress模板Galery。将显示以下对话框。

Tutorial_EF_Lesson1_1

选择“窗口控制器”或“视图控制器”,指定其名称,然后按“添加项目”按钮将新的控制器添加到您的项目中。使用控制器的设计器既可以从工具箱添加操作,也可以使用“属性”窗口自定义控制器的属性。要调用Designer,可以在解决方案资源管理器中右键单击控制器文件,然后选择View Designer上下文菜单项。请注意,Visual Studio Designer不能与通用控制器一起使用。请参阅ViewController <ViewType>ObjectViewController <ViewType,ObjectType>有关如何使设计者可用的信息的描述。在Designer中进行更改后,请不要忘记重建解决方案。否则,您将不会在模型编辑器中看到它们。

注意

为了方便起见,将Controllers文件夹添加到每个模块项目中,以使所有Controller保持在一起。同时,不需要使用此文件夹。项目的结构完全由您决定。

使用模板创建的Controller声明为部分类,并且包含一个代码隐藏文件,该文件将保存使用Designer设计的自定义文件。创建自定义Controller的另一种方法是声明一个从ControllerViewControllerViewController <ViewType>ObjectViewController <ViewType,ObjectType>)或WindowController派生的类。请注意,在这种情况下,默认情况下,使用设计器进行的自定义将添加到类主体中,这会使读取Controller代码变得更加困难。在这种情况下,不使用设计器可能更合适并手动在Controller代码中进行所有必需的自定义。这种方法的一个优点是手写代码可以更具可读性。另一个优点是您可以轻松地复制此类Controller,因为其代码位于单个文件中。

相关文章

转载保留此链接,注明出处