EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

定义控制器和按钮的范围

本主题描述如何设置激活控制器及其动作的条件。

指定控制器的范围

如果已实现一个Controller,该Controller在Controller.Activated事件处理程序或OnActivatedOnViewControlsCreated方法中执行代码,则可能必须定义执行此代码时的条件。例如,您可能需要定义一个定制网格编辑器的Controller仅对列表视图有效。为此,请直接更改Controller.Active属性的值,或使用本主题后面列出的Controller属性之一。

Controller.Active属性也会影响在这个控制器中声明的所有操作的可见性(如果控制器处于非活动状态,其所有操作也无效)。要隐藏单个Action,可以使用ActionBase类的属性(请参阅“更改Action的范围”)。

以下成员可帮助您指定激活Controller的必要条件:

成员 描述
主动控制器 提供对用于激活或停用控制器或确定其活动状态的原因/值对集合的访问。当此集合中的所有项目均为值时,控制器将处于活动状态。您可以添加具有表示条件表达式的值的项目,因此当此表达式返回false时,将停用Controller 。
ViewController.TargetObjectType 指定视图应代表以激活视图控制器的对象的类型。
ViewController.TargetViewId 指定要用于视图控制器的视图的ID。
ViewController.TargetViewType 指定要用于视图控制器的视图的类型。
ViewController.TargetViewNesting 指定用于视图控制器的视图必须是根,嵌套还是任何根。
WindowController.TargetWindowType 指定要用于窗口控制器的窗口的类型。

您可以从ViewController <ViewType>ObjectViewController <ViewType,ObjectType>继承Controller ,并使用通用参数来控制应激活View Controller的视图和类型。下面的示例演示了如何仅激活Person类的Detail View的Controller。

public class ViewController1 : ObjectViewController<DetailView, Person> {
    protected override void OnActivated() {
        base.OnActivated();
        Person person = this.ViewCurrentObject;
        DetailView detailView = this.View;
        // ....
    }
}

注意,ObjectViewController`2.ViewCurrentObjectObjectViewController`2.View属性类型根据作为通用参数传递的类型而改变。当您要避免将视图控制器的视图强制转换为ListViewDetailView时,这可能会很有用。请注意,Visual Studio设计器不适用于从通用类型继承的Controller。

改变行动范围

实施Action时,您可能希望以特定的形式显示它。例如,应该为仅代表约会对象的视图显示CancelAppointment操作。有两种停用动作的方法:停用其控制器和停用动作本身。

停用动作的控制器

在大多数情况下,您可以关闭(停用)声明了动作的控制器以隐藏该动作。如果您停用控制器,则其所有动作均将不可见。请参阅“指定控制器的范围”部分以了解如何执行此操作。

自行停用动作

还可以分别为每个操作定义目标视图Windows。为此,请使用以下属性:

成员 描述
动作库 提供对用于确定或更改操作的活动状态的键/值对集合的访问。结果状态确定操作的可见性。
ActionBase.Enabled 提供对用于确定操作的启用/禁用状态的键/值对集合的访问。禁用操作在用户界面中可见,但显示为灰色,无法执行。
ActionBase.TargetObjectsCriteria 指定启用操作的条件。
ActionBase.TargetObjectsCriteriaMode 指定当前所有选定的对象是否必须满足TargetObjectsCriteria条件才能启用操作。
ActionBase.TargetObjectType 指定当前视图应表示以激活操作的对象的类型。
ActionBase.TargetViewId 指定要为其执行操作的视图的ID。
ActionBase.TargetViewNesting 指定用于操作的视图必须是根视图,嵌套视图或任何其他视图。
ActionBase.TargetViewType 指定要用于操作的视图的类型。
ActionBase.SelectionDependencyType 指定用于启用操作的上下文。

这些属性控制操作在某些视图和Windows中是否可见。请参阅ActionBase.Active主题,以了解其他控制可见性状态的方法(例如,根据业务对象的属性值隐藏Action)。

相关文章

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