DevExpress的XAF取消分组布局继承类的。 (programmaticaly) [英] Devexpress xaf ungroup layout of inherited class. (programmaticaly)

查看:238
本文介绍了DevExpress的XAF取消分组布局继承类的。 (programmaticaly)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的DevExpress XAF创建一个多平台的应用程序。我有类'commonFields,其中包含常见的域CREATION_DATE,CREATED_BY等所有其他类继承此类。我的问题是,在的DetailView布局,共同字段显示标有commonFields在一组。

I am using devexpress xaf to create a multi platform app. I have class 'commonFields' which contains common fields "creation_date, created_by" etc. all other classes inherit from this class. My problem is that, in detailView layout, common fields are displayed in a group labled commonFields.

我知道它可以使用模型编辑器来解决,我只需右键点击在组,然后选择取消组合,但如果我有让说,50多桌,我将不得不从GUI单独编辑所有的布局。

I know it can be solved using the model editor where I can simply right click over the group and choose ungroup, but if I have lets say more than 50 tables I will have to edit all the layouts individually from the GUI.

我想知道有任何其他方式,方法或一些属性我可以添加到它将显示在同一组继承字段类

I wanted to know if there is any other way, a method or some attribute I can add to the class which will display inherited fields in the same group.

三江源

推荐答案

当然,你可以通过代码做到这一点。下面是DevExpress的文档:扩展和定制代码中中的应用模型

Sure you can do it via code. Here is the DevExpress documentation: Extend and Customize the Application Model in Code.

您需要提供自己的 ModelNodesGeneratorUpdater 的详细视图的XAF模型的一部分。它应该是这个样子:

You need to provide your own ModelNodesGeneratorUpdater for the detail views part of the XAF model. It should look something like this:

public class MyDetailViewGeneratorUpdater : ModelNodesGeneratorUpdater<ModelDetailViewLayoutNodesGenerator> 
{
    public override void UpdateNode(ModelNode node) 
    {
        IModelDetailViewLayout layout = node as IModelDetailViewLayout;
        IModelDetailView detailView = (IModelDetailView)layout.Parent;
        if (!XafTypesInfo.Instance.FindTypeInfo(typeof(MyBase)).IsAssignableFrom(detailView.ModelClass.TypeInfo))   return;
        foreach (IModelDetailViewLayoutElement element in layout)
            UpdateLayoutItems(element, detailView.Items, XafTypesInfo.Instance.FindTypeInfo(typeof(MyBase)).FindMember("Description"));
    }

    private void UpdateLayoutItems(IModelDetailViewLayoutElement element, IModelDetailViewItems items, IMemberInfo member) {
        IModelLayoutItem item = element as IModelLayoutItem;
        IModelLayoutGroup group = element as IModelLayoutGroup;
        if(group != null){
            foreach(IModelDetailViewLayoutElement element1 in group)
            UpdateLayoutItems(element1, items, member);
        }
        else if (item != null) {
            RemoveFromGroup(item); // you just need to code this bit of magic
        }
    }
}


$ B的这个位码$ b

不要忘了在模块中注册您的更新:

Don't forget to register your updater in the module:

public override void AddGeneratorUpdaters(ModelNodesGeneratorUpdaters updaters)
{
    base.AddGeneratorUpdaters(updaters);
    updaters.Add(new MyDetailViewGeneratorUpdater());
}

这篇关于DevExpress的XAF取消分组布局继承类的。 (programmaticaly)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆