利用XAF中的FeatureCenter例子的,直接打开DetailView

摘要:
[NonPersistent][DefaultClassOptions][AutoCreatableObject(ViewEditMode=ViewEditMode.View)]publicclassDomainObject1{publicstringTitle{get;set;

一、要将FeatureCenter的动态库FeatureCenter.Module.dll引入到你的应用程序中

二、 在需要直接加载DetailView类前加入:

[AutoCreatableObject(ViewEditMode = ViewEditMode.View)]

表明此类是要直接加载DetailView的

这个比较灵活,比帮助中的简单,方便,如:

[NonPersistent]
    [DefaultClassOptions][AutoCreatableObject(ViewEditMode = ViewEditMode.View)]
    public class DomainObject1
    {
    public string Title { get; set; }
    public string Context { get; set; }
    private static DomainObject1 instance;
        protected DomainObject1() : base() {}
        public static DomainObject1 Instance
        {
            get
            {
                if(instance == null) {
                    instance = new DomainObject1();
                }
                return instance;
            }
        }
}
    }

三、修改你的Module.cs

public sealed partial class FeatureCenterTestModule : ModuleBase
    {
        public FeatureCenterTestModule()
        {
            DevExpress.ExpressApp.ConditionalEditorState.Core.EditorStateRuleManager.CustomParseProperties += EditorStateRuleManager_CustomParseProperties;
            Disposed += FeatureCenterTestModule_Disposed;
            InitializeComponent();
   DateRangeRepository.RegisterRange(new DateRange("Rolling 1994", new RangePoint(new DateTime(1994, 1, 1), 0, TimeIntervalType.Day), new RangePoint(new DateTime(1994, 1, 1), DateTime.Today.DayOfYear, TimeIntervalType.Day)));
   DateRangeRepository.RegisterRange(new DateRange("Rolling 1995", new RangePoint(new DateTime(1995, 1, 1), 0, TimeIntervalType.Day), new RangePoint(new DateTime(1995, 1, 1), DateTime.Today.DayOfYear, TimeIntervalType.Day)));
   DateRangeRepository.RegisterRange(new DateRange("Rolling 1996", new RangePoint(new DateTime(1996, 1, 1), 0, TimeIntervalType.Day), new RangePoint(new DateTime(1996, 1, 1), DateTime.Today.DayOfYear, TimeIntervalType.Day)));

            Hints.RegisterViewSpecificHints();
        }

        private void Application_CustomizeFormattingCulture(object sender, CustomizeFormattingCultureEventArgs e) {
            e.FormattingCulture.NumberFormat.CurrencySymbol = System.Globalization.CultureInfo.GetCultureInfo("en-US").NumberFormat.CurrencySymbol;
        }
        private void application_CustomProcessShortcut(object sender, CustomProcessShortcutEventArgs e) {
            if (e.Shortcut != null && !string.IsNullOrEmpty(e.Shortcut.ViewId)) {
    IModelView modelView = Application.FindModelView(e.Shortcut.ViewId);
    if(modelView is IModelObjectView) {
     ITypeInfo typeInfo = ((IModelObjectView)modelView).ModelClass.TypeInfo;
     AutoCreatableObjectAttribute attribute = typeInfo.FindAttribute<AutoCreatableObjectAttribute>(true);
     if(attribute != null && attribute.AutoCreatable) {
      IObjectSpace objSpace = Application.CreateObjectSpace();
      object obj;
      if(typeof(XPBaseObject).IsAssignableFrom(typeInfo.Type)) {
       obj = objSpace.FindObject(typeInfo.Type, null);
       if(obj == null) {
        obj = objSpace.CreateObject(typeInfo.Type);
       }
      }
      else {
                            if (typeInfo.Type == typeof(DomainObject1))
                            {
                                obj = DomainObject1.Instance;
                            } else {
       obj = Activator.CreateInstance(typeInfo.Type);
      }
      }
      //obj = typeof(BaseObject).IsAssignableFrom(typeInfo.Type) ? objSpace.CreateObject(typeInfo.Type) : Activator.CreateInstance(typeInfo.Type);
      DetailView detailView = Application.CreateDetailView(objSpace, obj, true);
      if(attribute.ViewEditMode == ViewEditMode.Edit) {
       detailView.ViewEditMode = DevExpress.ExpressApp.Editors.ViewEditMode.Edit;
      }
      e.View = detailView;
      e.Handled = true;
     }
    }
            }
        }
        private void AuditTrailServiceInstance_QueryCurrentUserName(object sender, QueryCurrentUserNameEventArgs e) {
            //Do not remove this line. Usually, the current user name is supplied by an XAF application's Security System.
            //However, the FeatureCenter demo doesn't use the Security System module.
            //That's why we have to use the WindowsIdentity, to get the current user name.

            e.CurrentUserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
        }
        private void AuditTrailServiceInstance_CustomizeAuditTrailSettings(object sender, CustomizeAuditTrailSettingsEventArgs e) {
            e.AuditTrailSettings.Clear();
            e.AuditTrailSettings.AddType(typeof(FeatureCenter.Module.Audit.SimplePropertiesAuditedObject), true);
            e.AuditTrailSettings.AddType(typeof(FeatureCenter.Module.Audit.CollectionPropertiesAuditedObject), true);
            e.AuditTrailSettings.AddType(typeof(FeatureCenter.Module.Audit.AuditSettingsObject), new string[] { "Name", "AuditedProperty" });
            e.AuditTrailSettings.AddType(typeof(FeatureCenter.Module.Audit.ObjectAuditingModesObject), true);
        }
        private void FeatureCenterTestModule_Disposed(object sender, EventArgs e)
        {
            DevExpress.ExpressApp.ConditionalEditorState.Core.EditorStateRuleManager.CustomParseProperties -= EditorStateRuleManager_CustomParseProperties;
        }
        private void EditorStateRuleManager_CustomParseProperties(object sender, DevExpress.ExpressApp.ConditionalEditorState.Core.CustomParsePropertiesEventArgs e) {
            if (e.TypeInfo.Type == typeof(FeatureCenter.Module.ConditionalEditorState.HideShowEditorsObject)) {
                e.Handled = true;
            }
        }
        private void CustomizeAppearanceDemoObject(ITypeInfo ti) {
            if(ti != null) {
                IMemberInfo mi1 = ti.FindMember("HideSimpleLayoutItem");
                if(mi1 == null) {
                    mi1 = ti.CreateMember("HideSimpleLayoutItem", typeof(bool));
                    mi1.AddAttribute(new ImmediatePostDataAttribute());
                    mi1.AddAttribute(new VisibleInListViewAttribute(false));
                    mi1.AddAttribute(new VisibleInLookupListViewAttribute(false));
                }
                IMemberInfo mi2 = ti.FindMember("HideSimpleLayoutGroup");
                if(mi2 == null) {
                    mi2 = ti.CreateMember("HideSimpleLayoutGroup", typeof(bool));
                    mi2.AddAttribute(new ImmediatePostDataAttribute());
                    mi2.AddAttribute(new VisibleInListViewAttribute(false));
                    mi2.AddAttribute(new VisibleInLookupListViewAttribute(false));
                }
                IMemberInfo mi3 = ti.FindMember("HideTabPageGroup");
                if(mi3 == null) {
                    mi3 = ti.CreateMember("HideTabPageGroup", typeof(bool));
                    mi3.AddAttribute(new ImmediatePostDataAttribute());
                    mi3.AddAttribute(new VisibleInListViewAttribute(false));
                    mi3.AddAttribute(new VisibleInLookupListViewAttribute(false));
                }
            }
        }
        protected override BusinessClassesList GetBusinessClassesCore() {
            BusinessClassesList classesList = base.GetBusinessClassesCore();
            classesList.Add(typeof(OidGenerator));
            return classesList;
        }
        protected override void CustomizeModelApplicationCreatorProperties(ModelApplicationCreatorProperties creatorProperties) {
            base.CustomizeModelApplicationCreatorProperties(creatorProperties);
            creatorProperties.RegisterObject(
                typeof(DevExpress.ExpressApp.Validation.IModelRuleBase),
                typeof(FeatureCenter.Module.Validation.RuleStringLengthComparison),
                typeof(FeatureCenter.Module.Validation.IRuleStringLengthComparisonProperties));
            creatorProperties.RegisterObject(
                typeof(DevExpress.ExpressApp.Validation.IModelRuleBase),
                typeof(FeatureCenter.Module.Validation.CodeRuleObjectIsValidRule),
                typeof(DevExpress.Persistent.Validation.IRuleBaseProperties));
        }
        protected override ModuleTypeList GetRequiredModuleTypesCore() {
            ModuleTypeList moduleTypeList = base.GetRequiredModuleTypesCore();
            moduleTypeList.Add(typeof(DevExpress.ExpressApp.ConditionalAppearance.ConditionalAppearanceModule));
            moduleTypeList.Add(typeof(DevExpress.ExpressApp.SystemModule.SystemModule));
            return moduleTypeList;
        }
        public override void AddGeneratorUpdaters(ModelNodesGeneratorUpdaters updaters) {
            base.AddGeneratorUpdaters(updaters);
            updaters.Add(new ModelImageSourcesUpdater());
            updaters.Add(new ConditionalEditorStateNodesGeneratorUpdater());
            updaters.Add(new CustomDetailViewItemsGenarator());
            updaters.Add(new CustomDetailViewLayoutGenarator());
        }
        public override void Setup(XafApplication application) {
            base.Setup(application);
            if (!XafTypesInfo.IsInitialized) {
                XafTypesInfo.Instance.AddEntityToGenerate("DcNamedBaseObject", typeof(IDcNamedBaseObject));
                XafTypesInfo.Instance.AddEntityToGenerate("DcDisableEnableEditorsObject", typeof(IDcDisableEnableEditorsObject));
                XafTypesInfo.Instance.AddEntityToGenerate("DcDisableEnableEditorsAggregatedObject", typeof(IDcDisableEnableEditorsAggregatedObject));
                XafTypesInfo.Instance.AddEntityToGenerate("DcDisableEnableEditorsLookupObject", typeof(IDcDisableEnableEditorsLookupObject));
                XafTypesInfo.Instance.AddEntityToGenerate("DcDisableEnableEditorsCollectionElementObject", typeof(IDcDisableEnableEditorsCollectionElementObject));
            }
            Application.CustomizeFormattingCulture += new EventHandler<CustomizeFormattingCultureEventArgs>(Application_CustomizeFormattingCulture);
            application.CustomProcessShortcut += new EventHandler<CustomProcessShortcutEventArgs>(application_CustomProcessShortcut);
            AuditTrailService.Instance.TimestampStrategy = new LocalAuditTimestampStrategy();
            AuditTrailService.Instance.QueryCurrentUserName += new QueryCurrentUserNameEventHandler(AuditTrailServiceInstance_QueryCurrentUserName);
            AuditTrailService.Instance.CustomizeAuditTrailSettings += new CustomizeAuditSettingsEventHandler(AuditTrailServiceInstance_CustomizeAuditTrailSettings);
            //((ViewVariantsModule)application.Modules.FindModule(typeof(ViewVariantsModule))).GenerateVariantsNode = false;
        }
        public override void CustomizeTypesInfo(ITypesInfo typesInfo) {
            base.CustomizeTypesInfo(typesInfo);
            CustomizeAppearanceDemoObject(typesInfo.FindTypeInfo(typeof(FeatureCenter.Module.ConditionalEditorState.HideShowEditorsObject)));
            CustomizeAppearanceDemoObject(typesInfo.FindTypeInfo(typeof(FeatureCenter.Module.ConditionalAppearance.ConditionalAppearanceHideShowEditorsObject)));
        }
        public override void ExtendModelInterfaces(ModelInterfaceExtenders extenders) {
            base.ExtendModelInterfaces(extenders);
            extenders.Add<IModelMember, IModelClassMemberExtender>();
            extenders.Add<IModelPropertyEditor, IModelPropertyEditorClassMemberExtender>();
            extenders.Add<IModelLayoutGroup, IModelLayoutGroupExtender>();
            extenders.Add<IModelView, IModelViewDemoDescription>();
        }
    }
    public class ModelImageSourcesUpdater : ModelNodesGeneratorUpdater<ImageSourceNodesGenerator> {
        public override void UpdateNode(ModelNode node) {
            //IModelAssemblyResourceImageSource customImages = (IModelAssemblyResourceImageSource)node[CustomImages.CustomImagesAssemblyInfo.AssemblyName];
            //if(customImages == null) {
            //    customImages = node.AddNode<IModelAssemblyResourceImageSource>(CustomImages.CustomImagesAssemblyInfo.AssemblyName);
            //    customImages.Index = node.NodeCount - 1;
            //}
            //customImages.Folder = "Images";
        }
    }
    public class ConditionalEditorStateNodesGeneratorUpdater : ModelNodesGeneratorUpdater<ConditionalEditorStateNodesGenerator> {
        public override void UpdateNode(ModelNode node) {
            ITypeInfo ti = XafTypesInfo.Instance.FindTypeInfo(typeof(FeatureCenter.Module.ConditionalEditorState.HideShowEditorsObject));
            if(ti != null) {
                IModelEditorStateRule hideSimpleLayoutItem = node.AddNode<IModelEditorStateRule>("HideShowEditorsObject.HideSimpleLayoutItem ID");
                hideSimpleLayoutItem.ModelClass = node.Application.BOModel[ti.FullName];
                hideSimpleLayoutItem.Attribute = new EditorStateRuleAttribute("HideShowEditorsObject.HideSimpleLayoutItem ID", "SimpleLayoutItem", EditorState.Hidden, "HideSimpleLayoutItem = 'True'", ViewType.DetailView);

                IModelEditorStateRule hideSimpleLayoutGroup = node.AddNode<IModelEditorStateRule>("HideShowEditorsObject.HideSimpleLayoutGroup ID");
                hideSimpleLayoutGroup.ModelClass = node.Application.BOModel[ti.FullName];
                hideSimpleLayoutGroup.Attribute = new EditorStateRuleAttribute("HideShowEditorsObject.HideSimpleLayoutGroup ID", "SimpleLayoutGroup", EditorState.Hidden, "HideSimpleLayoutGroup = 'True'", ViewType.DetailView);

                IModelEditorStateRule hideTabPageGroup = node.AddNode<IModelEditorStateRule>("HideShowEditorsObject.HideTabPageGroup ID");
                hideTabPageGroup.ModelClass = node.Application.BOModel[ti.FullName];
                hideTabPageGroup.Attribute = new EditorStateRuleAttribute("HideShowEditorsObject.HideTabPageGroup ID", "TabPageGroup", EditorState.Hidden, "HideTabPageGroup = 'True'", ViewType.DetailView);
            }
        }
}

这样你就可以直接使用DetailView

免责声明:文章转载自《利用XAF中的FeatureCenter例子的,直接打开DetailView》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇PHP各版本的区别腾讯云分布式数据库TDSQL再获认可下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

前端嵌入视频直播和聊天支持.m3u8格式

1、安装vue-video-player npm install vue-video-player --save 2、在main.js中引入vue-video-player import VideoPlayer from 'vue-video-player' require('video.js/dist/video-js.css') require('vu...

maven filters 和 resource

1 filter 1.1 用途 对多个配置文件进行选择。 1.2 选择的依据 1.3 使用的方式 第一,在<resource>标签下面加<filtering>标签,并且<filtering>标签的值设置为true; 第二,添加<filters>标签,添加<filter>,并且值中使用env变量 第...

使用Mathjax网页插入公式

本文关于 想在网页里面插入公式,找到了 Mathjax,这里说怎么设置,具体来说是怎么在博客园设置。以及一点点如何使用。 设置方法 需要开通js的权限。 进入 设置。 在页脚Html代码输入: <script type="text/x-mathjax-config"> MathJax.Hub.Config({ displayAlign:...

My97DatePicker控件调用

引用My97DatePicker,在要使用的jsp页面中引入js,如下 <script type="text/javascript" src="<%=request.getContextPath() %>/dd/js/My97DatePicker/WdatePicker.js"></script> 调用My97DateP...

Uploadify 3.2 参数属性、事件、方法函数详解

一、属性 属性名称 默认值 说明 auto true 设置为true当选择文件后就直接上传了,为false需要点击上传按钮才上传 。 buttonClass ” 按钮样式 buttonCursor ‘hand’ 鼠标指针悬停在按钮上的样子 buttonImage null 浏览按钮的图片的路径 。...

在 Vue+TypeScript 项目中,如何配置 ESLint 和 Prettier

在接手一些老项目的时候,最让人头疼的就是代码格式化不统一的问题,控制台满屏 eslint 警告,简直是要逼死强迫症的节奏。 如果是开启一个新的Vue项目,我一定会选用 Vue Cli + TypeScript + ESLint + Prettier 的组合,这个配置有以下好处: TypeScript 使我们的代码更规范 ESLint + Prettie...