Devexpress xaf ungroup继承类的布局。 (编程)

时间:2015-02-02 15:31:10

标签: c# layout devexpress xaf

我正在使用devexpress xaf来创建一个多平台应用程序。我有班级' commonFields'其中包含公共字段" creation_date,created_by"所有其他类都继承自此类。我的问题是,在详细的View布局中,公共字段显示在一个标记为commonFields的组中。

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

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

三江源

2 个答案:

答案 0 :(得分:2)

当然可以通过代码完成。以下是DevExpress文档:Extend and Customize the Application Model in Code

您需要为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());
}

答案 1 :(得分:0)

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

首先,请务必阅读oficial DevExpress recomendations about Layout Customization

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

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

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