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

一、要将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

原文地址:https://www.cnblogs.com/ddlzq/p/2272378.html