Devexpress xaf ungroupinheritance类的布局。 (programmaticaly)

我正在使用devexpress xaf来创建一个多平台应用程序。 我有类’commonFields’,它包含公共字段“creation_date,created_by”等所有其他类inheritance自此类。 我的问题是,在detailView布局中,常见字段显示在一个标记为commonFields的组中。

我知道它可以使用模型编辑器解决,我只需右键单击该组并选择取消组合,但如果我说超过50个表,我将不得不从GUI单独编辑所有布局。

我想知道是否有任何其他方法,方法或某些属性我可以添加到类中,它将在同一组中显示inheritance的字段。

谢谢

当然你可以通过代码完成。 这是DevExpress文档: 在代码中扩展和自定义应用程序模型 。

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

 public class MyDetailViewGeneratorUpdater : ModelNodesGeneratorUpdater { 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()); } 

我担心没有内置属性,但这里有一些方向:

首先,请务必阅读有关布局自定义的正式DevExpress建议 。

其次,检查Xpand框架的部分视图inheritance 。 肯定是一个强大的工具,但不会在上面描述的情况下节省你的时间,但由于我不知道你所拥有的所有复杂性,这里是一个你可以信赖的玩家。

另外,您是否考虑过为分组布局提供机会? 您可以找到使其具有吸引力和实用性的方法。 检查如何使其可扩展: https : //www.devexpress.com/Support/Center/Question/Details/Q101774

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