C# Devexpress xaf取消继承类的组布局。(程序设计)

C# Devexpress xaf取消继承类的组布局。(程序设计),c#,layout,devexpress,xaf,C#,Layout,Devexpress,Xaf,我正在使用devexpress xaf创建一个多平台应用程序。我有一个类“commonFields”,它包含公共字段“creation\u date,created\u by”等。所有其他类都继承自这个类。我的问题是,在detailView布局中,公共字段显示在标记为commonFields的组中 我知道可以使用模型编辑器解决这个问题,我可以在组上单击鼠标右键并选择“取消组”,但是如果我有50多个表,我必须从GUI中单独编辑所有布局 我想知道是否有其他方法、方法或属性可以添加到类中,以显示同一组

我正在使用devexpress xaf创建一个多平台应用程序。我有一个类“commonFields”,它包含公共字段“creation\u date,created\u by”等。所有其他类都继承自这个类。我的问题是,在detailView布局中,公共字段显示在标记为commonFields的组中

我知道可以使用模型编辑器解决这个问题,我可以在组上单击鼠标右键并选择“取消组”,但是如果我有50多个表,我必须从GUI中单独编辑所有布局

我想知道是否有其他方法、方法或属性可以添加到类中,以显示同一组中的继承字段


谢谢

恐怕这没有内置属性,但这里有一些说明:

首先,一定要阅读

第二,检查Xpand框架的。 当然这是一个强大的工具,但是在上面描述的情况下,它不会为您节省时间,但是因为我不知道您所拥有的所有复杂性,这里有一个您可以信赖的玩家

另外,您是否考虑过给分组布局一个机会?你可以想办法让它变得有吸引力和有用。检查如何使其可扩展:


如果上面的解决方案都不能满足您的需要,并且您所需要的只是节省在所有视图中将其解组的时间,请记住您可以直接编辑xaf的模型XML文件。在父对象属性之后生成的LayoutGroups在所有视图中具有相同的ID,您可以在所有视图的这些组中将ShowCaption巧妙地设置为false;)

当然可以通过代码来完成。以下是DevExpress文档:

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

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
        }
    }
}
public override void AddGeneratorUpdaters(ModelNodesGeneratorUpdaters updaters)
{
    base.AddGeneratorUpdaters(updaters);
    updaters.Add(new MyDetailViewGeneratorUpdater());
}