private void GenerateCustomLayout(IModelDetailView modelDetailView) { ITypeInfo iTypeInfo = modelDetailView.ModelClass.TypeInfo; HashSet <string> actionContainerNames = new HashSet <string>(); foreach (IModelViewItem item in modelDetailView.Items) { IModelPropertyEditor editorInfo = (IModelPropertyEditor)item; if (CustomLayoutHelper.FindModelDefaultAttribute(editorInfo.ModelMember.MemberInfo, VisiblePropertiesAttribute) != null) { editorInfo.PropertyEditorType = typeof(DetailPropertyEditor); } string visiblePropertiesAttributeValue = ((IModelMemberExtender)item).VisibleProperties; if (editorInfo.PropertyEditorType == typeof(DetailPropertyEditor) && !string.IsNullOrEmpty(visiblePropertiesAttributeValue)) { string nestedViewId = iTypeInfo.Name + "_" + editorInfo.PropertyName + "_DetailView"; editorInfo.View = modelDetailView.Application.Views[nestedViewId]; } ModelDefaultAttribute actionsContainerAttribute = CustomLayoutHelper.FindModelDefaultAttribute(editorInfo.ModelMember.MemberInfo, ActionsContainerAttribute); if (actionsContainerAttribute != null) { actionContainerNames.Add(actionsContainerAttribute.PropertyValue); } } foreach (string name in actionContainerNames) { IModelActionContainerViewItem modelActionContainerViewItem = modelDetailView.Items.AddNode <IModelActionContainerViewItem>(name); } }
private void GenerateModelClasses(ModelNode boModel, ITypeInfo typeTnfo) { foreach (IMemberInfo memberInfo in typeTnfo.OwnMembers) { ModelDefaultAttribute attribute = CustomLayoutHelper.FindModelDefaultAttribute(memberInfo, CustomDetailViewItemsGenarator.VisiblePropertiesAttribute); if ((attribute != null) && (!string.IsNullOrEmpty(attribute.PropertyValue))) { IModelClass modelClass = ((IModelBOModel)boModel)[memberInfo.MemberType.FullName]; if (modelClass == null) { modelClass = boModel.AddNode <IModelClass>(memberInfo.MemberType.FullName); ITypeInfo typeInfo = XafTypesInfo.Instance.FindTypeInfo(memberInfo.MemberType); modelClass.SetValue <ITypeInfo>("TypeInfo", typeInfo); } CustomLayoutHelper.Instance.RegisterClassVisibleProperties(modelClass.Name, attribute.PropertyValue); } } }